【问题标题】:http.client.BadStatusLine: '' when attempting app-only twitter oauth with python3http.client.BadStatusLine: '' 使用 python3 尝试仅应用程序的 twitter oauth 时
【发布时间】:2013-10-01 20:35:51
【问题描述】:

我正在尝试创建一个脚本来处理Twitter 流。不幸的是,OAuth 过程阻碍了我。采用我在互联网上找到的一些代码,我收到了来自https://api.twitter.com/oauth/token 的空白回复。为了更好地理解这个过程,我试图在没有特殊模块的情况下做到这一点。这是我的代码,缺少什么?任何帮助将不胜感激。

代码:

import http.client
import urllib
import base64

CONSUMER_KEY = 'yadayadayada'
CONSUMER_SECRET = 'I am really tired today'

encoded_CONSUMER_KEY = urllib.parse.quote(CONSUMER_KEY)
encoded_CONSUMER_SECRET = urllib.parse.quote(CONSUMER_SECRET)
concat_consumer_url = encoded_CONSUMER_KEY + ':' + encoded_CONSUMER_SECRET


host = 'api.twitter.com'
url = '/oauth2/token/'
params = urllib.parse.urlencode({'grant_type' : 'client_credentials'})
req = http.client.HTTPSConnection(host, timeout = 100)
req.set_debuglevel(1)
req.putrequest("POST", url)
req.putheader("Host", host)
req.putheader("User-Agent", "My Twitter 1.1")
req.putheader("Authorization", "Basic %s" % base64.b64encode(b'concat_consumer_url'))
req.putheader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")
req.putheader("Content-Length", "29")
req.putheader("Accept-Encoding", "identity")
req.endheaders()

req.send(b'params')

resp = req.getresponse()


print ("{} {}".format(resp.status, resp.reason))

错误信息:

C:\Python33>app_only_test_klug.py
Traceback <most recent call last>:
    File "C:\Python33\app_only_test_klug.py", line 31, in <module>
        resp = req.getresponse()
    File "C:\Python33\lib\http\client.py", line 1131, in getresponse
        response.being()
    File "C:\Python33\lib\http\client.py", line 354, in begin
        version, status, reason = self._read_status()
    File "C:\Python33\lib\http\client.py", line 324, in _read_status
        raise BadStatusLine(line)
http.client.BadStatusLine: ''

任何帮助将不胜感激。

更新:

经过一番修改,我认为问题出在我的 base64 编码上:

req.putheader("Authorization", "Basic %s" % base64.b64encode(b'concat_consumer_url'))

当我对上述结果编码进行解码时,我得到“b'concat_consumer_url'”,而不是在冒号周围组合的 encoded_CONSUMER_KEY 和 encoded_CONSUMER_SECRET 的串联。如何将 base64 转换为 b64encode concat_comsumer_url 表示的值而不是字符串“concat_consumer_url”,以便我可以继续前进?提前致谢。

【问题讨论】:

    标签: python twitter oauth


    【解决方案1】:

    我相信问题也存在——您应该只将变量传递给编码函数,而不是将变量的名称作为字节传递,如下所示:

    req.putheader("Authorization", "Basic %s" % base64.b64encode(concat_consumer_url))
    

    使用该更改再试一次。

    【讨论】:

    • 谢谢!这适用于格式化,但响应仍然是空白的。
    猜你喜欢
    • 2018-12-26
    • 2012-01-19
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2011-04-16
    • 2014-05-25
    相关资源
    最近更新 更多