Python 3 equivalent of Python 2 urllib.urlencode



我正在使用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')

最新更新