Как отправить почтовый запрос?
Я нашел этот скрипт в интернете:
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 ответа:
Если вы действительно хотите работать с 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) } } } } }