我正在使用Python 2.7和Python 3向远程服务器发出POST请求,并在每种情况下得到不同的响应。问题可能是每个请求中的数据是如何编码的吗?Python 3 相当于我在 2.7 中所做的是什么?
// Python 2.7
data = {'username':'test'}
data = urllib.urlencode(data)
print(data)
req = urllib2.Request(base_link + 'inf.cgi', data, headers)
response = urllib2.urlopen(req)
mypage = response.read()
用户=测试
// Python 3
data = {'username':'test'}
data = urllib.parse.urlencode(data).encode("utf-8")
print(data)
base_link = 'http://tax1.co.monmouth.nj.us/cgi-bin/'
# Make HTTP request
request = urllib.request.Request(url, data, headers)
mypage = urllib.request.urlopen(request).read()
b'用户=测试'
在不对数据进行编码的情况下尝试此操作:
data = urllib.parse.urlencode(data)
给出与 2.7 中类似的输出:
用户=测试
但在发出 POST 请求时导致错误:"类型错误:POST 数据应该是字节、字节的可迭代对象或文件对象。它不能是 str 类型。
您正在寻找urllib.parse
.这是我使用的代码示例。
address = urllib.parse.quote(address, safe='/:=?&', encoding="utf-8", errors="strict")
address = urllib.request.urlopen(address).read().decode('utf8')