Je veux envoyer des données encodées JSON à un serveur en utilisant uniquement des bibliothèques natives Python. J'aime les requêtes mais je ne peux tout simplement pas les utiliser car je ne peux pas les utiliser sur la machine qui exécute le script Je dois le faire sans.
newConditions = {"con1":40, "con2":20, "con3":99, "con4":40, "password":"1234"}
params = urllib.parse.urlencode(newConditions)
params = params.encode('utf-8')
req = urllib.request.Request(conditionsSetURL, data=params)
urllib.request.urlopen(req)
Mon serveur est un serveur WAMP local. J'ai toujours un
urllib.error.HTTPError: Erreur HTTP 500: Erreur de serveur interne
Je suis sûr à 100% que c'est PAS un problème de serveur, car les mêmes données, avec la même URL, sur le même machine, avec le même serveur fonctionne avec la bibliothèque de demandes et Postman.
Vous ne publiez pas de JSON, vous publiez un application/x-www-form-urlencoded
demande.
Encodez en JSON et définissez les en-têtes appropriés:
import json
newConditions = {"con1":40, "con2":20, "con3":99, "con4":40, "password":"1234"}
params = json.dumps(newConditions).encode('utf8')
req = urllib.request.Request(conditionsSetURL, data=params,
headers={'content-type': 'application/json'})
response = urllib.request.urlopen(req)
Démo:
>>> import json
>>> import urllib.request
>>> conditionsSetURL = 'http://httpbin.org/post'
>>> newConditions = {"con1":40, "con2":20, "con3":99, "con4":40, "password":"1234"}
>>> params = json.dumps(newConditions).encode('utf8')
>>> req = urllib.request.Request(conditionsSetURL, data=params,
... headers={'content-type': 'application/json'})
>>> response = urllib.request.urlopen(req)
>>> print(response.read().decode('utf8'))
{
"args": {},
"data": "{\"con4\": 40, \"con2\": 20, \"con1\": 40, \"password\": \"1234\", \"con3\": 99}",
"files": {},
"form": {},
"headers": {
"Accept-Encoding": "identity",
"Connection": "close",
"Content-Length": "68",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "Python-urllib/3.4",
"X-Request-Id": "411fbb7c-1aa0-457e-95f9-1af15b77c2d8"
},
"json": {
"con1": 40,
"con2": 20,
"con3": 99,
"con4": 40,
"password": "1234"
},
"Origin": "84.92.98.170",
"url": "http://httpbin.org/post"
}