Как отправить запрос POST?
Я нашел этот скрипт онлайн:
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 для людей. The сообщение 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)
}
}
}
}
}