我需要在GET请求中发送此JSON数组
{"user": "jähn", "id": 3}
我尝试使用
data = '{"user": "jähn", "id": 3}'
headers = {
'Content-type': 'application/json',
'Accept': 'text/plain'
}
request = urllib.request.Request(self.update_url, data=data,
headers=headers, method='GET')
response = urllib.request.urlopen(request)
但是它失败了:TypeError:POST数据应该是字节或字节可迭代的。它不能是str类型。
我发现很奇怪的另一件事是,尽管我在Request to GET上设置了方法,但它告诉我有关POST数据的信息。
由于这是一个简单的脚本,因此我不希望使用像python-requests这样的库
您不能使用JSON编码的主体进行GET请求,因为GET请求仅由URL和标头组成。参数使用URL编码代替编码到URL中,没有选择将这些参数编码为JSON。
您可以使用urllib.parse.urlencode()
函数创建URL编码的参数,然后使用附加到URL ?
。
from request.parse import urlencode
data = {"user": "jähn", "id": 3} # note, a Python dictionary, not a JSON string
parameters = urlencode(data)
response = urllib.request.urlopen('?'.join((self.update_url, parameters)))
不要使用该data
参数;使用该关键字参数将强制请求使用POST方法:
数据必须是
bytes
指定要发送到服务器的其他数据的对象,或者None
如果不需要这些数据。当前,HTTP请求是唯一使用数据的请求。提供data参数时,HTTP请求将是POST而不是GET。数据应为标准application / x-www-form-urlencoded格式的缓冲区。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句