Ich habe dieses Skript online gefunden:
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()
Aber ich verstehe nicht, wie man es mit PHP benutzt oder was alles in der Variablen params ist oder wie man es benutzt. Kann ich bitte etwas helfen, wenn ich versuche, dass dies funktioniert?
Wenn Sie wirklich mit HTTP mit Python umgehen möchten, empfehle ich Requests: HTTP for Humans . Der POST - Schnellstart angepasst an Ihre Frage ist:
>>> 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...
>>>
Wenn Sie benötigen, dass Ihr Skript portierbar ist und Sie keine Abhängigkeiten von Drittanbietern haben möchten, senden Sie POST eine reine Anforderung in 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)
Beispielausgabe:
{
"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"
}
Sie können POST -Anfragen nicht mit urllib
(nur für GET) abwickeln. Versuchen Sie stattdessen das Modul requests
, z.
Beispiel 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
Beispiel 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"
},
...
}
Beispiel 1.3:
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, data=json.dumps(payload))
Verwenden Sie die requests
-Bibliothek für GET, POST, PUT oder DELETE, indem Sie einen API-Endpunkt REST anschlagen. Übergeben Sie die Rest-API-Endpunkt-URL in url
, Nutzlast (dict) in data
und Header/Metadaten in headers
import requests, json
url = "bugs.python.org"
payload = {"number": 12524,
"type": "issue",
"action": "show"}
header = {"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain"}
response_decoded_json = requests.post(url, data=payload, headers=head)
response_json = response_decoded_json.json()
print response_json
Wenn Sie kein Modul verwenden möchten, das Sie wie requests
installieren müssen, und Ihr Anwendungsfall sehr einfach ist, können Sie urllib2
verwenden.
urllib2.urlopen(url, body)
Die Dokumentation zu urllib2
finden Sie hier: https://docs.python.org/2/library/urllib2.html .