如何使用Python的httplib向URL发送带有参数字典的POST请求?

20
我只需要一个能够接收两个参数的函数:
  • 要POST到的URL
  • 参数字典
请问如何使用httplib实现呢?谢谢。

2
请使用urllib2。http://stackoverflow.com/questions/321582/urllib2-data-sending。 - S.Lott
2个回答

40

来自 Python 文档

>>> import httplib, urllib
>>> params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
>>> headers = {"Content-type": "application/x-www-form-urlencoded",
...            "Accept": "text/plain"}
>>> conn = httplib.HTTPConnection("musi-cal.mojam.com:80")
>>> conn.request("POST", "/cgi-bin/query", params, headers)
>>> response = conn.getresponse()
>>> print response.status, response.reason
200 OK
>>> data = response.read()
>>> conn.close()

29
恰当的信用归属:这段内容是直接从http://docs.python.org/release/2.6/library/httplib.html(或2.5.2或更早版本,多年来没有太大变化)中抄袭而来。 - dland
参数需要以那种格式吗?它们可以是原始文本吗? - Usman Ismail
是的,您可以将原始文本作为参数传递,urllib.urlencode 只需处理要传递的字符串的 URL 编码,如果您打印它,您会看到它只是一个字符串。 - Ole

11

一个更简单的方法,只使用urllib:

import urllib
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
f = urllib.urlopen("http://www.example.org/cgi-bin/query", params)
print f.read()

在Python文档中找到了urllib模块


5
抱歉,但这很可能是执行HTTP GET请求而不是POST请求。 - hko
4
不,这是从urllib页面上的POST示例中来的。请注意,参数是用, params添加而不是%params - Ed Brannin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接