【问题标题】:How do I use Python's httplib to send a POST to a URL, with a dictionary of parameters?如何使用 Python 的 httplib 将带有参数字典的 POST 发送到 URL?
【发布时间】:2010-03-03 09:27:35
【问题描述】:

我只想要一个可以接受 2 个参数的函数:

  • 要发布到的 URL
  • 参数字典

如何用 httplib 做到这一点?谢谢。

【问题讨论】:

标签: python api post httplib


【解决方案1】:

来自Python documentation

>>> 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()

【讨论】:

  • 信用到期的信用:这是直接从docs.python.org/release/2.6/library/httplib.html(或2.5.2或更早版本,多年来没有太大变化)窃取的。
  • 参数是否需要采用这种格式?它们可以是原始文本吗?
  • 是的,您可以将原始文本作为参数传递,urllib.urlencode 只负责对要传递的字符串进行 url 编码,如果您将其打印出来,您会发现它只是一个字符串
【解决方案2】:

一个更简单的,只使用 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 module

【讨论】:

  • 抱歉,这很可能是一个 HTTP GET,而不是一个 POST
  • @hko 不,它来自该 urllib 页面上的 POST 示例。请注意,参数是用, params 添加的,而不是% params
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2016-10-06
相关资源
最近更新 更多