2014-06-12 2 views
-1

내가 인증받지 못했다는 오류 메시지가 나타납니다. 그렇지 않으면 나는 트위터 API 1.1에서 일반 짹짹 (단지 텍스트)를 게시하거나 모든 GET 함수를 사용할 수 없었다. 내가 무슨 짓을했는지Twitter API 1.1 상태/update_with_media 동안 오류 코드 32

:

나는 (API에 쉽게 액세스를 제공하는 트위터 API의 추상화) Zend_Service_Twitter를 확장 내 자신의 클래스를 작성했습니다

. API의 더 많은 끝점을 구현하기 위해 확장했습니다. 예 : "상태/update_with_media". 이 함수의 기능은 다른 함수와 비슷합니다 (처음에는 init(), 매개 변수 설정 및 끝 호출 후 함수에서). 내가 API를 에 설명되어있는대로 'multipart/form-data'Zend_Http_Client있는 EncType 설정했습니다. GET 요청이 잘 작동하고 GET 계정/verify_credentials도 작동합니다.

ErrorMessage가

이 :하지만 POST이 오류 occures 당신을 인증 할 수 없습니다를

ErrorCode가 : 32

젠드 1.12.5

PHP 5.3.14


사용

예 요청 :

POST /1.1/statuses/update_with_media.json HTTP/1.1 
Host: api.twitter.com 
Connection: close 
Accept-encoding: gzip, deflate 
User-Agent: Zend_Http_Client 
Cookie:twid=u%3D1725343788%7CY611pVKbM7CH6i%2Br1Ni%2BkeuSXfU%3D;_twitter_sess=BAh7CDoPY3JlYXRlZF9hdGwrCGmjH4tGAToMY3NyZl9pZCIlMGFlNzY5ZDVh%250AMGQ3OThjNGU5YzE1ZjA3YTZmN2I4ZjM6B2lkIiU4ZWJkNTRhOTNhNjhiMGIz%250ANzZjMzYxMTEyZWU3Y2E2Yg%253D%253D--a632ea1411849916ca5399f9654a241b0a70a17f;guest_id=v1%3A140249344476018229;lang=de; 
Accept-Charset: ISO-8859-1,utf-8 
Authorization: OAuth realm="",oauth_consumer_key="bBmTZTbVaziLelczV7VwqBa1U",oauth_nonce="df79065c315b5ed8d690c92a8016cece",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1402493472",oauth_version="1.0",oauth_token="1725343788-CxwJ3G6HRl0POkrqz6dl6HZImgFdeSzNucyqNkI",oauth_signature="z%2BuRj%2FEyWbo4ym12uYoQdOob%2Bmc%3D" 
Content-Type: multipart/form-data; boundary=---ZENDHTTPCLIENT-6c7c5ce101c5dcf5f666f17e1a10486b 
Content-Length: 71108 

-----ZENDHTTPCLIENT-6c7c5ce101c5dcf5f666f17e1a10486b 
Content-Disposition: form-data; name="status" 

sorjghkl sdaghl 
-----ZENDHTTPCLIENT-6c7c5ce101c5dcf5f666f17e1a10486b 
Content-Disposition: form-data; name="media[]" 
..... here is the binary picture (access with the function file_get_contents(realpath($src)))... 
+0

다음의 일반적인 함정을 확인한다. https://dev.twitter.com/docs/uploading-media –

+0

Ty하지만 문제는 없습니다. 내 사진의 최대 파일 크기는 70.826 바이트이므로 아무런 문제가 없습니다. 상태 업데이트 당 최대 미디어 수는 1입니다. 사용자는 미공개 일일 상태 업데이트 제한과는 별도로 별도의 일일 미디어 업로드 제한이 있습니다. 오늘 또는 어제 모든 사진을 tweeted ... 그림은 .jpg이며 원시 이진 데이터의 file_getcontents 함수를 사용합니다. – jhilgefo

답변

1

좋아, 문제를 해결했습니다.

Zend_Oauth_Client는 모든 매개 변수가 Http-Client로 설정된 후에 Zend_Oauth_Client가 Oauth-Header를 준비한다는 점이 무엇입니까? 그래서 oauth_signature가 theses Parameters에 생성됩니다 ... 이것은 다른 모든 작업에는 적합하지만 그림 업로드에는 적합하지 않습니다. 그래서 내가 한 일은 zend에서이 코드를 덮어 썼다는 것입니다.

Zend_OAuth_Client를 확장 한 새로운 클라이언트는 요청 메소드를 덮어 씁니다. zend 메소드와 비슷하지만 함수 호출이없는 prepareOauth(). 이제 조부모의 요청 메소드를 호출해야하기 때문에 parent :: request()를 호출 할 때주의해야한다.

이 후 나는 Zend_Service_Twitter 내 확장 기능에서 내 자신의 메서드를 만들었습니다.이 메서드는 post() - 메서드를 덮어 씁니다. 거기에서 나는 prepareOauth() 메소드를 호출하는 연대기를 제시한다.