Twitter API仅应用程序身份验证(Python3)

时间:2018-07-18 14:36:30

标签: python-3.x macos curl twitter twitter-oauth

我正在尝试从twitter API检索承载令牌,以允许进行Twitter's API documentation中所述的仅应用程序身份验证。 conf.ini包含consumer_key和consumer_secret。

到目前为止,这是我的代码:

import configparser
import requests
import base64

conf = configparser.ConfigParser()
conf.read('conf/conf.ini')

consumer_key = conf['consumer-api-key']['value']
consumer_secret = conf['consumer-secret']['value']

key_secret = base64.urlsafe_b64encode('{}:{}'.format(consumer_key, consumer_secret).encode('ascii')).decode('ascii')

base_url = 'https://api.twitter.com/'
auth_url = '{}oauth2/token'.format(base_url)
auth_headers = {
    'Authorization': 'Basic {}'.format(key_secret),
    'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
auth_data = {
    'grant_type': 'client_credentials'
}

auth_resp = requests.post(auth_url, headers=auth_headers, data=auth_data)
print(auth_resp.status_code)

因此,我尝试了多种不同的方法,甚至在重新生成用户密钥和机密方面都做得很。在每种情况下,我都收到以下答复:

'< HTTP/1.1 403 Forbidden' and {"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}.

我在故障排除中尝试了以下所有操作:

  • 在cURL中手动写出命令。参考:curl -u $ CONSUMER_KEY:$ CONSUMER_SECRET“ --compressed --data'grant_type = client_credentials''https://api.twitter.com/oauth2/token'
  • 删除.ini,而只是将使用者密钥和机密导入为字符串
  • 使用Twython和确切的示例源代码(使用我的密钥)。
  • 等待15分钟,这是速率限制器的超时时间。
  • Logged out of Twitter,以防万一!
  • 引用了推理in this blog post.

我也有人尝试将我的密钥与他们的代码一起使用,并且能够成功进行应用程序身份验证。我还检查了代码的每一步,可以看到变量似乎都是我所期望的。

我知道这是一个重复的主题,但是以前提供的答案似乎都无法解决。 预先感谢,您可以提供任何帮助。


我的编辑继续进行以下问题排查:

再次尝试使用cURL只是尝试确保我的密钥有效:

curl -i -X POST -H "Authorization: Basic TOKEN" -d "grant_type=client_credentials" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" "https://api.twitter.com/oauth2/token"
HTTP/1.1 403 Forbidden
cache-control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0
content-disposition: attachment; filename=json.json
content-length: 105
content-type: application/json;charset=utf-8
date: Wed, 18 Jul 2018 18:06:00 GMT
expires: Tue, 31 Mar 1981 05:00:00 GMT
last-modified: Wed, 18 Jul 2018 18:06:00 GMT
ml: S
pragma: no-cache
server: tsa_b
status: 403 Forbidden
strict-transport-security: max-age=631138519
x-connection-hash: 4c3591363bea2e655f52dc9ec52aa5ee
x-content-type-options: nosniff
x-frame-options: DENY
x-response-time: 66
x-transaction: 001f3cd100c15114
x-tsa-request-body-time: 0
x-twitter-response-tags: BouncerCompliant
x-ua-compatible: IE=edge,chrome=1
x-xss-protection: 1; mode=block; report=https://twitter.com/i/xss_report
Connection: Keep-Alive
Set-Cookie: personalization_id="v1_Ro1inxBH+QRZGVyrYilreg=="; Expires=Fri, 17 Jul 2020 18:06:00 GMT; Path=/; Domain=.twitter.com
Set-Cookie: guest_id=v1%3A153193716084353644; Expires=Fri, 17 Jul 2020 18:06:00 GMT; Path=/; Domain=.twitter.com

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

TOKEN是...产生的结果

base64.urlsafe_b64encode('{}:{}'.format(twconsumer_key, twconsumer_secret).encode('UTF-8')).decode('UTF-8')

1 个答案:

答案 0 :(得分:0)

此代码有效。我有一个Web代理,用于修改流量。

编辑:使用上述方法获得承载令牌后,我能够将其连续传递给Twitter并进行搜索。