10

默认情况下,似乎(对我来说)每个urlopen()带参数的人似乎都发送一个 POST 请求。如何设置调用以发送 GET?

import urllib
import urllib2

params = urllib.urlencode(dict({'hello': 'there'}))
urllib2.urlopen('http://httpbin.org/get', params)

urllib2.HTTPError:HTTP 错误 405:不允许使用方法

4

3 回答 3

12

您可以使用与发布请求相同的方式:

import urllib
import urllib2

params = urllib.urlencode({'hello':'there', 'foo': 'bar'})
urllib2.urlopen('http://somesite.com/get?' + params)

第二个参数只应在发出 POST 请求时提供,例如在发送application/x-www-form-urlencoded内容类型时。

于 2012-10-11T00:28:41.883 回答
4

当提供数据参数时,HTTP 请求将是 POST 而不是 GET。试试urllib2.urlopen('http://httpbin.org/get?hello=there')吧。

于 2012-10-11T00:25:41.383 回答
2

如果您正在发出 GET 请求,那么您想要传递查询字符串。您可以通过放置问号“?”来做到这一点。在参数之前的网址末尾。

import urllib
import urllib2

params = urllib.urlencode(dict({'hello': 'there'}))
req = urllib2.urlopen('http://httpbin.org/get/?' + params)
req.read()
于 2012-10-11T00:42:55.907 回答