application-only authenticationを使用してTwitter APIリクエストを作成しようとしていますが、ベアラトークンを受信するためにHTTPリクエストを送信すると403エラーが発生します。これは私の要求が適切に形成されていないことが原因であると思われますが、上記のガイドラインに従うことでエラーを見つけることができません。次のようにTwitter APIを使用してアプリケーションを認証しようとしたときにエラーが発生しました
私のコード(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にエンコードします。私はその後、 "Basic"に連結することができるように、私はTypeErrorを得るために、base64を文字列に変換します。
このコードを実行すると、私は以下のように、最後の行にエラーが表示されます。
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
EDIT:
エラーや印刷をキャッチした後、私は次の取得:
b'{"errors":[{"code":99,"message":"Unable to verify your credentials","label":"authenticity_token_error"}]}'
ヘッダーの変更(Content-LengthとUser-Agentの追加/削除)を試みましたが、同じエラーが発生しています。ありがとう。
エラーレスポンスの本文がどのように見えるかは興味深いでしょう。私はここで何が起こっているのか考えていると思いますが、私は最初に特定したいと思います。 – DaSourcerer
私はerror.fp.read()の出力を追加しましたが、何を作るのかは分かりません –