Python: urllib2.urlopen(url, data) 为什么要对数据使用 urllib.urlencode()?
我之前以为,使用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这个容器里区分出有效载荷。”