我需要在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类型。
我觉得很奇怪的另一件事是它告诉我有关POST数据的事情,尽管我在Request to GET上设置了方法。
由于这是一个简单的脚本,我宁愿不使用像python-requests这样的库
答案 0 :(得分:3)
您无法使用JSON编码的正文发出GET请求,因为GET请求只包含URL和标头。使用URL编码将参数编码到URL中,而不是将这些参数编码为JSON的选项。
您使用urllib.parse.urlencode()
function创建网址编码参数,然后使用?
附加到网址。
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方法:
data 必须是
bytes
对象,指定要发送到服务器的其他数据,如果不需要此类数据,则为None
。目前,HTTP请求是唯一使用数据的请求;提供数据参数时,HTTP请求将是POST而不是GET。 data 应该是标准 application / x-www-form-urlencoded 格式的缓冲区。