【问题标题】:How do I create a GET request with parameters?如何创建带参数的 GET 请求?
【发布时间】:2012-10-01 13:47:49
【问题描述】:

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

import urllib
import urllib2

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

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

【问题讨论】:

  • 代码dict({...}) 是多余的,{...} 语法已经创建了一个字典,所以你可以只使用urlencode({'hello': 'there'})

标签: python http get urllib2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用,与发布请求大致相同:

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

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

    【讨论】:

    • 如此接近...urlencode 不添加?。此外,dict({...}) 是多余的,{...} 语法已经创建了一个 dict
    • 必须在 URL 末尾添加 ?,但现在可以正常工作了。谢谢。
    • 是的,你是对的,@Dietrich Epp。我复制了提问者的相同代码sn-p。
    • 我编辑了帖子的代码 sn-p 以避免有人阅读时产生疑问。
    【解决方案3】:

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

    import urllib
    import urllib2
    
    params = urllib.urlencode(dict({'hello': 'there'}))
    req = urllib2.urlopen('http://httpbin.org/get/?' + params)
    req.read()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2015-02-27
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多