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

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

问题描述:

我试图使用application-only authentication来制作Twitter API请求,但发送HTTP请求以接收持票人令牌时发生403错误。我认为这可能是由于我的要求没有正确形成,但我找不到错误(遵循上面的指导原则)。尝试使用Twitter API验证应用程序时出现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"}]}' 

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

+0

看到错误响应的主体是什么样子会很有趣。我想我对这里发生的事情有一个想法,但我想先确定一下。 – DaSourcerer

+0

我添加了error.fp.read()的输出,但我不知道该怎么做 –

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