我想仅使用本机Python库将JSON编码的数据发送到服务器。我喜欢请求,但我根本无法使用它,因为我无法在运行脚本的计算机上使用它。我需要没有它。
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)
我的服务器是本地WAMP服务器。我总是得到一个
urllib.error.HTTPError:HTTP错误500:内部服务器错误
我 100%确信 这 不是 服务器问题,因为在同一台计算机上,同一台服务器上的同一数据,相同的url与请求库和Postman一起使用。
您不发布JSON,而是发布application/x-www-form-urlencoded请求。
application/x-www-form-urlencoded
编码为JSON并设置正确的标题:
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)
演示:
>>> 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" }