尝试使用Twitter API验证应用程序时出现403错误

时间:2016-05-17 11:03:20

标签: python http python-3.x twitter

我尝试使用application-only authentication发出Twitter API请求,但在发送HTTP请求以接收承载令牌时,我收到403错误。我认为这可能是由于我的请求没有正确形成,但我无法找到错误(遵循上面链接的指导原则)。

我的代码(Python 3.5)如下:

btwitter = twitterkey.encode('utf-8') #utf-8 encodes the key
twitterkey = b64encode(btwitter) #b64 encode key from "consumer:secret" to bytes 
twitterkey = bytes.decode(twitterkey) # decodes to string
url = "https://api.twitter.com/oauth2/token" 
data = "grant_type=client_credentials"
data = data.encode('utf-8')
headers = {'Authorization' : "Basic "+twitterkey+"", 'Content-Length' : '29','User-Agent':'myapp v1','Content-Type':'application/x-www-form-urlencoded;charset=UTF-8'}
method = 'POST'
request = urllib.request.Request(url,data,headers,method)
response = urllib.request.urlopen(request)

我也不确定我是否正确编码了密钥。在Twitter的文档之后,我将字符串编码为字节,然后编码为base64。然后我将base64转换回字符串,这样我就可以将它连接到" Basic",否则我会得到一个TypeError。

运行此代码时,我在最后一行收到错误,如下所示:

File "main.py", line 69, in <module>
response = urllib.request.urlopen(request)
...
File "<path>", line 589, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

编辑:

在捕获错误并打印后,我得到以下内容:

b'{"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}]}'

我尝试更改标题(添加/删除内容长度和用户代理),但我收到了同样的错误。谢谢。

1 个答案:

答案 0 :(得分:0)

我最终发现错误 - 我正在从文件中读取密钥并忘记删除换行符,因此发送到服务器的密钥错误。