【问题标题】:httplib failing when requesting from digitalocean api从 digitalocean api 请求时 httplib 失败
【发布时间】:2017-05-24 11:44:02
【问题描述】:

我正在玩弄数字海洋 api,我希望能够发送 HTTP 请求并在 python 中得到响应。但是,我不断收到 301 永久移动。当我使用curl 时,它工作正常。但是,当检查实际的 HTTP 标头时,看起来我正在发送相同的请求,但用户代理除外。谁能告诉我我做错了什么?

我使用的curl 命令是

curl -v -X GET "https://api.digitalocean.com/v2/actions" \
  -H "Authorization: Bearer secret"

这是我的python代码。

import httplib

token = 'secret'
hostname = 'api.digitalocean.com'
conn = httplib.HTTPConnection(hostname)

conn.set_debuglevel(1)

conn.connect()
conn.putrequest('GET', '/v2/actions', skip_accept_encoding=True)
conn.putheader('Accept', '*/*')
conn.putheader('User-Agent', 'TestProgram')
conn.putheader('Authorization', 'Bearer ' + token)
conn.endheaders()
conn.send('')

response = conn.getresponse()

print response.read()
print response.getheaders()

conn.close()

【问题讨论】:

    标签: python digital-ocean


    【解决方案1】:

    请注意,使用:

    conn = httplib.HTTPConnection(hostname)
    

    您正在创建 HTTP 连接,并且 DO 正在使用 HTTP 重定向来要求您使用 https://api.digitalocean.com/

    $ wget -S 'http://api.digitalocean.com'
    --2017-01-10 16:41:14--  http://api.digitalocean.com/
    Resolving api.digitalocean.com... 104.16.24.4, 104.16.25.4
    Connecting to api.digitalocean.com|104.16.24.4|:80... connected.
    HTTP request sent, awaiting response...
      HTTP/1.1 301 Moved Permanently
      Location: https://api.digitalocean.com/
    Location: https://api.digitalocean.com/
    

    顺便说一句,请停止使用httplib,请改用requests

    【讨论】:

    • 谢谢。将其更改为 HTTPSConnection 有效。我会检查请求。
    猜你喜欢
    • 2021-11-04
    • 2013-11-12
    • 2012-08-13
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多