从 digitalocean api 请求时 httplib 失败

httplib failing when requesting from digitalocean api

我正在玩弄数字海洋 api,我希望能够发送 HTTP 请求并在 python 中获得响应。但是我一直收到 301 永久移动。当我使用 curl 时,它工作正常。然而,当检查实际的 HTTP headers 时,看起来我正在发送相同的请求,除了 user-agent。谁能告诉我我做错了什么?

我使用的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()

请注意,使用:

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