Как отправить почтовый запрос?


Я нашел этот скрипт в интернете:

import httplib, urllib
params = urllib.urlencode({'number': 12524, 'type': 'issue', 'action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded",
            "Accept": "text/plain"}
conn = httplib.HTTPConnection("bugs.python.org")
conn.request("POST", "", params, headers)
response = conn.getresponse()
print response.status, response.reason
302 Found
data = response.read()
data
'Redirecting to <a href="http://bugs.python.org/issue12524">http://bugs.python.org/issue12524</a>'
conn.close()

но я не понимаю, как использовать его с PHP или что все внутри переменной params или как его использовать. Могу я, пожалуйста, немного помочь с попыткой заставить это работать?

4 169

4 ответа:

Если вы действительно хотите работать с HTTP с помощью Python, я настоятельно рекомендую запросы: HTTP для людей. Элемент сообщение quickstart адаптирован к вашему вопросу:

>>> import requests
>>> r = requests.post("http://bugs.python.org", data={'number': 12524, 'type': 'issue', 'action': 'show'})
>>> print(r.status_code, r.reason)
200 OK
>>> print(r.text[:300] + '...')

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>
Issue 12524: change httplib docs POST example - Python tracker

</title>
<link rel="shortcut i...
>>> 

Если вам нужно, чтобы ваш скрипт был переносимым, и вы бы предпочли не иметь каких-либо сторонних зависимостей, вот как вы отправляете запрос POST чисто в Python 3.

from urllib.parse import urlencode
from urllib.request import Request, urlopen

url = 'https://httpbin.org/post' # Set destination URL here
post_fields = {'foo': 'bar'}     # Set POST fields here

request = Request(url, urlencode(post_fields).encode())
json = urlopen(request).read().decode()
print(json)

пример вывода:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "foo": "bar"
  }, 
  "headers": {
    "Accept-Encoding": "identity", 
    "Content-Length": "7", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Python-urllib/3.3"
  }, 
  "json": null, 
  "origin": "127.0.0.1", 
  "url": "https://httpbin.org/post"
}

вы не можете получить запросы POST с помощью urllib (только для GET), вместо этого попробуйте использовать requests модуль, например:

пример 1.0:

import requests

base_url="www.server.com"
final_url="/{0}/friendly/{1}/url".format(base_url,any_value_here)

payload = {'number': 2, 'value': 1}
response = requests.post(final_url, data=payload)

print(response.text) #TEXT/HTML
print(response.status_code, response.reason) #HTTP

пример 1.2:

>>> import requests

>>> payload = {'key1': 'value1', 'key2': 'value2'}

>>> r = requests.post("http://httpbin.org/post", data=payload)
>>> print(r.text)
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

пример 1.3:

>>> import json

>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}

>>> r = requests.post(url, data=json.dumps(payload))
import UIKit
import Alamofire
import SwiftyJSON

class HttpNetwork: NSObject {
func networkCall(parameter:Parameters?,callType:HTTPMethod,Url:String,headerParam:[String:String]? ,completion: @escaping (_ swift_result: JSON?,_ errorMessage:String?) -> Void){


    debugPrint("\\\\\\\\\\\\\\API_INFO\\\\\\\\\\\\\\\\\")
    debugPrint("================\(callType.rawValue)=====================")
    debugPrint("PARAM==========\(String(describing: parameter))==============")
    debugPrint("HEADERS==============\(String(describing: headerParam))=====================================")

    let url:String?

        url = Url

    debugPrint("URL==============\(String(describing: url))=======================")

    if (NetworkReachabilityManager()?.isReachable == false){


        completion(nil, "Please check your internet connection")
    }
    else{

        Alamofire.request(url!, method:callType, parameters:parameter,encoding: JSONEncoding.default, headers: headerParam).responseJSON {
            response in

            if let bytes = response.data {
                if let response = String(bytes: bytes, encoding: .utf8) {
                    print("API RESPONSE : \(response)")
                }
            }

            switch response.result {
            case .success:

                do{

                    let swifty_object = try JSON(data: response.data!)

                    if swifty_object["status"].bool == true{

                        completion(swifty_object,nil)
                    }
                    else{

                        completion(nil,swifty_object["message"].description)
                    }


                }
                catch{

                    completion(nil,error.localizedDescription)

                }
                break
            case .failure(let error):

                completion(nil,error.localizedDescription)

            }
        }
    }
}


func uploadImageToServerByMultiPart(targetImage:UIImage,targetUrl:String,withName_OR_paramKey:String,headerParam:[String:String]?,completion:@escaping (_ swift_result: JSON?,_ errorMessage:String?) -> Void){

    let imageData = UIImageJPEGRepresentation(targetImage, 1.0)

    if (NetworkReachabilityManager()?.isReachable == false){

       completion(nil, "Please check your internet connection")

    }
    else{


        Alamofire.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(imageData!, withName: withName_OR_paramKey, fileName: "file.jpeg", mimeType: "image/jpeg")
        }, to: targetUrl, method:.put, headers:headerParam)
        { (result) in
            //
            switch result {
            case .success(let upload, _, _):
                upload.uploadProgress { progress in

                    print("completed : \(progress.fractionCompleted) ")
                    // DEVELOPER : FRACTION HUD USED
                    //hud.progress = Float(progress.fractionCompleted)

                }

                upload.responseJSON { response in
                    debugPrint(response)

                    if(response.result.isSuccess)
                    {

                        let httpStatusCode = response.response?.statusCode
                        if httpStatusCode == 201 || httpStatusCode == 200{
                            //SDImageCache.shared().store(image, forKey: self.user_image_file_url)
                            do{

                                let swifty_object = try JSON(data: response.data!)
                                completion(swifty_object,nil)
                            }
                            catch{

                                completion(nil,error.localizedDescription)
                            }

                        }
                        else{

                            completion(nil,response.result.error!.localizedDescription)
                        }

                    }
                    if(response.result.isFailure){

                        completion(nil,response.result.error!.localizedDescription)


                    }
                }
            case .failure(let encodingError):

                 completion(nil,encodingError.localizedDescription)


            }
        }

    }
}


}