php python json urllib

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.