2016-05-17 28 views
1

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の追加/削除)を試みましたが、同じエラーが発生しています。ありがとう。

+0

エラーレスポンスの本文がどのように見えるかは興味深いでしょう。私はここで何が起こっているのか考えていると思いますが、私は最初に特定したいと思います。 – DaSourcerer

+0

私はerror.fp.read()の出力を追加しましたが、何を作るのかは分かりません –

答えて

0

エラーが見つかりました - 私はファイルからキーを読み込み、改行文字を削除するのを忘れていたので、サーバーに送信されたキーが間違っていました。

関連する問題