web-dev-qa-db-ger.com

Wie senden POST anfordern?

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?

204
user1113569

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...
>>> 
301
user816328

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"
}
115
stil

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))
27
d1jhoni1b

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
0
Pranzell

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 .

0
Phil