私は非常に単純なアプリケーションを書いて、特定の条件で自分のツイッターステータスを更新しました。私はtwitterのドキュメントを使用して、OAuth署名の作成要件とAuthorizationヘッダーの構造を理解しました。 PHPでcURLでリクエストを送信します。OAuthで認証できないのはなぜですか?
TwitterのDEVサイトにOAuthのツールを使用し、私は両方の私の署名ベース文字列と認可ヘッダを比較し、両者が正確に同じである。
署名ベース文字列
POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&oauth_consumer_key%3DYNxxxxxxxxxxxWnfI6HA%26oauth_nonce%3D31077a3c7b7bee4e4c7e2b5185041c12%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1340729904%26oauth_token%3D2991771-4csoiO2fxmWgSxxxxxxxxxxDjWj2AbyxATtiuadNE%26oauth_version%3D1.0%26status%3Dblah%2520test%2520blah.
認可ヘッダー
Authorization: OAuth oauth_consumer_key="YN4FLBxxxxxxxxxxI6HA", oauth_nonce="31077a3c7b7bee4e4c7e2b5185041c12", oauth_signature="M2cXepcxxxxxxxxxxAImeAjE%2FHc%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1340729904", oauth_token="2991771-4cxxxxxxxxxxSmRvjzMoooMDjWj2AbyxATtiuadNE", oauth_version="1.0"
明らかに私はomeの文字をx
とするとデータを隠すことができますが、文字の2つの文字を比較すると全く同じ結果が得られます。参考までに、OAuthツールが生成するタイムスタンプとノンスをハードコードして、私の値をチェックのために同じにすることができます。私のアクセスレベルは読み取りと書き込みに設定されています。その同じページには、コマンドラインでcURLを使用して実行する最後の例があります。このコマンドを実行すると、問題なく完全に動作し、私のtwitterフィードに投稿されます。
これまで考えてきたことは、これまでに作成したものはすべて問題ではないと思います。以前に述べた詳細を生成するコードを投稿しているとは思いません。しかし、私は電話をかけるために使用するコードは、カールを使用して、私が犯人だと思うが、なぜ言うことができない。
<?php
// ...
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $baseUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: $header"));
curl_setopt($curl, CURLOPT_POSTFIELDS, array('status' => $status));
$result = json_decode(curl_exec($curl));
curl_close($curl);
var_dump($result);
注意を$baseUrl
、$header
と$status
は、署名を生成する際に使用したのと同じ変数であることをベースストリングと承認ヘッダーが一致しています。
実行があるページの出力:
object(stdClass)#1 (2) { ["error"]=> string(34) "Could not authenticate with OAuth." ["request"]=> string(23) "/1/statuses/update.json" }
私は正しい方向に私を指すために誰かのためにここに十分な詳細があります願っています!
https://dev.twitter.com/discussions/305(URLを確認するなど)とhttps://dev.twitter.com/discussions/308(HTTPSオプションの確認など)を確認しましたか? – Will
残念ながら、はい。私が言ったように、署名ベースの文字列と承認ヘッダーはまったく同じであり、コマンドラインのカールが完全に機能するので、これらのどちらでもないことができます。 – LeonardChallis
全く同じ問題がありました。ありがとう! – bozdoz