J'ai trouvé ce script en ligne:
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()
Mais je ne comprends pas comment l’utiliser avec PHP, ce que tout est dans la variable params ou comment l’utiliser. Puis-je avoir un peu d'aide pour essayer de faire fonctionner cela?
Si vous voulez vraiment gérer HTTP avec Python, je vous recommande vivement Requests: HTTP for Humans . Le quickstart POST adapté à votre question est le suivant:
>>> 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...
>>>
Si vous avez besoin que votre script soit portable et que vous préfériez ne pas avoir de dépendances tierces, vous envoyez la demande POST uniquement en 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)
Exemple de sortie:
{
"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"
}
Vous ne pouvez pas réaliser de demandes POST à l'aide de urllib
(uniquement pour GET); essayez plutôt d'utiliser requests
module, par exemple:
Exemple 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
Exemple 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"
},
...
}
Exemple 1.3:
>>> import json
>>> url = 'https://api.github.com/some/endpoint'
>>> payload = {'some': 'data'}
>>> r = requests.post(url, data=json.dumps(payload))
Utilisez la bibliothèque requests
pour GET, POST, PUT ou DELETE en cliquant sur un noeud final d'API REST. Transmettez l'URL du noeud final de l'API restante dans url
, la charge utile (dict) dans data
et l'en-tête/les métadonnées dans 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
Si vous ne voulez pas utiliser un module, vous devez l'installer comme requests
et que votre cas d'utilisation est très basique, vous pouvez alors utiliser urllib2
urllib2.urlopen(url, body)
Voir la documentation de urllib2
ici: https://docs.python.org/2/library/urllib2.html .