php - Python3: JSON POST Request WITHOUT biblioteca de solicitudes
urllib (1)
No está publicando JSON, está publicando una application/x-www-form-urlencoded
request.
Codifique a JSON y establezca los encabezados correctos:
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)
Manifestación:
>>> 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"
}
Quiero enviar datos codificados JSON a un servidor utilizando solo bibliotecas nativas de Python. Me encantan las solicitudes, pero simplemente no puedo usarlas porque no puedo usarlas en la máquina que ejecuta el script. Necesito hacerlo sin.
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)
Mi servidor es un servidor local WAMP. Siempre consigo un
urllib.error.HTTPError: HTTP Error 500: Error interno del servidor
Estoy 100% seguro de que este NO es un problema del servidor, porque los mismos datos, con la misma url, en la misma máquina, con el mismo servidor funcionan con la biblioteca de solicitudes y con el cartero.