2017-10-18 5 views
0

ディアーズポストツイート/1.1/statuses/update.jsonに障害が発生した使用して、あなたに

私は私のウェブサイトから自分のTwitterのユーザーアカウントにツイートを投稿しようとする際にかなりの時間を投資しているが認証できませんでした既製のソリューションを使用せずに。 ウェブサイトにはapp.twitter.comの読み取り/書き込みアクセス権が与えられており、すべての鍵が再生成されています。

私は、エンドポイントを参照するTwitterのAPIの指示に従って、「POSTの/1.1/statuses/update.json」

ています私は二重の私のすべてのオブジェクトをチェックして、まだ私がしたい

response  =--- !ruby/object:Net::HTTPUnauthorized 
http_version: '1.1' 
code: '401' 
message: Authorization Required 
header: 
    connection: 
    - close 
    content-length: 
    - '89' 
    content-type: 
    - application/json; charset=utf-8 
    date: 
    - Wed, 18 Oct 2017 15:28:19 GMT 
    server: 
    - tsa_o 
    set-cookie: 
    - personalization_id="v1_pxDMvL5ZrViFDcn8AfFemw=="; Expires=Fri, 18 Oct 2019 15:28:19 
    UTC; Path=/; Domain=.twitter.com 
    - guest_id=v1%3A150834049962807489; Expires=Fri, 18 Oct 2019 15:28:19 UTC; Path=/; 
    Domain=.twitter.com 
    strict-transport-security: 
    - max-age=631138519 
    x-connection-hash: 
    - '05228a7a2026efc93a8a2d4b1a8c6460' 
    x-response-time: 
    - '142' 
    x-tsa-request-body-time: 
    - '1' 
body: '{"errors":[{"code":32,"message":"Could not authenticate you."}]}' 
read: true 
uri: 
decode_content: true 
socket: 
body_exist: true 

を取得しています私のウェブサイトから簡単な「こんにちは」を自分のツイッターアカウントに送信し、以下に示すすべての部分をダブルチェックしてください。

また、同じロジックを使用して、自分のTwitterアカウントを使用して自分のWebサイトで私を認証します。だから私は認可(3足)が適切に機能することを知っています。

私のレールアプリでつぶやきを投稿するには、私のアプリのコンシューマとアクセストークンのペアを使用して、すべての承認手順を踏むことなく、2)明示的にツイートを投稿するウェブサイト。どちらのシナリオでもエラー401が発生します。実際のtweeting手順を除いてすべて動作します。

ご協力いただきありがとうございます。私は宝石の使用に興味がなく、関連するAPIドキュメントを徹底的に読んでいます。ここで

私のポストの要求のすべての成分:

Parameter String:  
include_entities=true& 
oauth_consumer_key=Xffffffffffffffffffffffff& 
oauth_nonce=1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8& 
oauth_signature_method=HMAC-SHA1& 
oauth_timestamp=1508340584& 
oauth_token=4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG& 
oauth_version=1.0& 
status=Hello 

signature base string: 
POST& 
https%3A%2F%2Fapi.twitter.com%2F1.1%2Fstatuses%2Fupdate.json& 
include_entities%3Dtrue%26 
oauth_consumer_key%3DXffffffffffffffffffffffff%26 
oauth_nonce%3D1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8%26 
oauth_signature_method%3DHMAC-SHA1%26 
oauth_timestamp%3D1508340584%26 
oauth_token%3D4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG%26 
oauth_version%3D1.0%26 
status%3DHello 

signing key: 
W6SzwsKSXwFpl8tb0UNJFoCTW6crf6p3JaS8GipJMErofZVLAA&ENxK6XHG8h2EI7dOeSL0fABJzqnzs7FhP6QirBbXvd0br 

signature: 
0zx68mHx/SxhHkoRpaqZmO8iC2s= 

header string: 
OAuth oauth_consumer_key="Xffffffffffffffffffffffff", 
oauth_nonce="1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8", 
oauth_signature="0zx68mHx%2FSxhHkoRpaqZmO8iC2s%3D", 
oauth_signature_method="HMAC-SHA1", 
oauth_timestamp="1508340584", 
oauth_token="4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG", 
oauth_version="1.0" 


POST REQUEST 
request  =--- !ruby/object:Net::HTTP::Post 
method: POST 
request_has_body: true 
response_has_body: true 
uri: 
path: "/1.1/statuses/update.json?include_entities=true" 
decode_content: true 
header: 
    content-type: 
    - application/x-www-form-urlencoded 
    authorization: 
    - OAuth oauth_consumer_key="Xffffffffffffffffffffffff", oauth_nonce="1vGbvxCqsfGi47L7ecpRnwA33fEojFoy6J2hkRpa8", 
    oauth_signature="0zx68mHx%2FSxhHkoRpaqZmO8iC2s%3D", oauth_signature_method="HMAC-SHA1", 
    oauth_timestamp="1508340584", oauth_token="4444444444-GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG", 
    oauth_version="1.0" 
    host: 
    - api.twitter.com 
    accept-encoding: 
    - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 
    accept: 
    - "*/*" 
    user-agent: 
    - Ruby 
body: '{"status":"Hello"}' 
body_stream: 
body_data: 

答えて

0

私は最終的にそれが動作するようになりました。いくつかの問題が存在しました。署名と権限ヘッダーではありません。代わりに、使用されたタイムスタンプに問題が存在しました。これは、正しく同期されていなかったし、GMTではなく、ツイッターが期待していたものです。システムクロックをtime.google.comと同期させました。この部分が完了しました。今や、ソートを必要とするヘッダーについての問題もありました。これは、Twitterの独自のドキュメントとは対照的に、署名ベースの文字列のコンテキスト内でのソートについての話です。私は拡張ヘッダーもソートする必要があることを知りました。署名計算に含まれていないツイート自体が含まれているため拡張されました。この部分が掲示されるとツイートが成功した

関連する問題