Python: urllib2.urlopen(url, data) 为什么要对数据使用 urllib.urlencode()?

7 投票
2 回答
9538 浏览
提问于 2025-04-15 18:50

我之前以为,使用POST请求的时候,所有的信息都会通过HTTP头部发送(显然我对这个话题了解得不够),所以我很困惑为什么还需要把数据转换成key=value&key2=value2这种格式。这个格式在使用POST时有什么作用呢?

# Fail
data = {'name': 'John Smith'}
urllib2.urlopen(foo_url, data)

但是

# Success
data = {'name': 'John Smith'}
data = urllib.urlencode(data)
urllib2.urlopen(foo_url, data)

2 个回答

2

数据必须采用标准的 application/x-www-form-urlencoded 格式。urlencode 是一个可以把你的参数转换成网址编码字符串的工具。

9

这和“Content-Type”这个头信息有关:客户端必须知道POST数据是怎么编码的,不然它怎么知道怎么解码呢?

通常我们用的方式是通过 application/x-www-form-urlencoded 这种编码格式。

现在,如果问“为什么我们需要编码?”,答案就是“因为我们需要能够在HTTP这个容器里区分出有效载荷。”

撰写回答