使用cURL / pycurl处理HTTP 100响应(OAuth 2.0)

时间:2018-07-29 20:18:01

标签: python curl oauth-2.0 pycurl

我正在尝试验证使用Python / pycurl在stocktwits(see API)上发布的机器人。据我了解,首先我需要通过oauth/authorize请求该应用程序被授权使用Stocktwits用户数据,该数据返回一个授权代码。然后,我需要通过oauth/token确认许可,该许可将发回可用于发布股票twitter的访问令牌。

我遇到的问题是,我向auth/authorize发出发布请求后,返回的响应是

Host: api.stocktwits.com
Authorization: Basic bmljay5vc2hpbm92QGdtYWlsLmNvbTp6YWRuaWsxMg==
User-Agent: PycURL/7.43.0.2 libcurl/7.60.0 OpenSSL/1.1.0h zlib/1.2.11 c- 
ares/1.14.0 WinIDN libssh2/1.8.0 nghttp2/1.32.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

< HTTP/1.1 100 Continue

,程序将暂停等待。如何处理http 100响应?

api调用的代码如下

def get_auth_token:
    auth_data = ""
    c = pycurl.Curl()
    c.setopt(c.CAINFO, self.CA_CERTS)
    c.setopt(pycurl.POST, 1)
    c.setopt(c.URL, uri_to_ouath_authorize_call)
    c.setopt(c.FOLLOWLOCATION, True)
    c.setopt(c.WRITEDATA, auth_data)
    c.setopt(c.USERPWD, 'bot_account_username:password')

1 个答案:

答案 0 :(得分:1)

我猜测您需要使用POSTFIELDSREADFUNCTION来提供发布数据,看起来您没有为请求正文配置任何内容。参见https://curl.haxx.se/libcurl/c/CURLOPT_POST.html

使用pycurl.POST是一个常见错误,通常应改用POSTFIELDS