2017-10-18 9 views
0

애들 아포스트 트윗 /1.1/statuses/update.json에 실패하여, 당신에게

내 웹 사이트에서 내 자신의 트위터 사용자 계정에 트윗을 게시하려고에 꽤 많은 시간을 투자를 인증 할 수 없습니다 기성품 솔루션을 사용하지 않아도됩니다. 웹 사이트에 app.twitter.com에서 읽기/쓰기 권한이 부여되어 있으며 모든 키가 재생성되었습니다.

가 나는 두 번 내 모든 개체를 확인하고 아직도 얻고있다 "POST의 /1.1/statuses/update.json"

엔드 포인트 참조 트위터 API의 지침에 따라 오전

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 

내가 원하는 내 웹 사이트에서 간단한 "Hello"를 내 트위터 계정으로 보내고 아래에 제시 될 모든 부분을 두 번 확인하십시오.

또한 동일한 논리를 사용하여 내 트위터 계정을 사용하여 웹 사이트에서 나를 인증합니다. 그래서 인증 (3-leg)이 제대로 작동한다는 것을 알고 있습니다.

내 레일 앱으로 트윗을 올리려면 모든 권한 부여 단계를 거치지 않고 내 앱의 소비자 및 액세스 토큰 쌍을 사용하여 트윗을 게시하고 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

나는 마지막으로 작동있어. 몇 가지 문제가있었습니다. 서명 및 인증 헤더가 아닙니다. 대신 사용 된 타임 스탬프에 문제가 있었으며 트위터가 예상대로 제대로 동기화되지 않았고 그리니치 표준시도 아닙니다. 내 시스템 시계를 time.google.com과 동기화했으며이 부분이 완료되었습니다. 이제, 정렬을 필요로하는 헤더에 관한 문제도있었습니다. 트위터의 자체 문서와는 달리 서명 기본 문자열의 컨텍스트에서만 정렬에 대해 이야기하고 있습니다. 나는 또한 확장 헤더가 정렬이 필요하다는 것을 알았다. 서명 계산의 일부가 아닌 트윗 자체가 포함되어 확장되었습니다. 게시 할 때이 부분이 만들어지면 짹짹이 성공했습니다