[업데이트 2011-09-21 11:19] 문제를 일으키는 한 가지 문제가 수정되었으며 GMT/GMT +2 현지 시간은 GMT + 2이며 트위터는 GMT + 0/UTC를 사용합니다. 이로 인해 시간 초과 오류가 발생했습니다.API 기능을 사용하여 사진을 트위터에 업로드하는 방법 POST 상태/update_with_media
이제 문제가 해결되어 다음 문제에 직면했습니다. "{"request ":"/ 1/statuses/update_with_media.json ","error ":"OAuth로 인증 할 수 없습니다. . "}"
이 (컬을 사용하여) Themattharris PHP 라이브러리를 통해 생성 요청 헤더입니다 :
["request_header"]=>
string(587) "POST /1/statuses/update_with_media.json HTTP/1.1
User-Agent: themattharris' HTTP Client
Host: upload.twitter.com
Accept: */*
Authorization: OAuth oauth_consumer_key="L9AWIB6jvxm3Req1XWHxJA", oauth_nonce="9e41eea04e2dcc2b67784b35c27d8740", oauth_signature="N2Y4YzYwMDg1YjBmZTA1NDgwNDdjOGY3MDI4YjdiNWE3M2E5ZTA5YQ%3D%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1316596483", oauth_token="373846001-bJYH4C47vk34yfIH3XbpvvfZjd2JrIX9OlO5MyO2", oauth_version="1.0"
Content-Length: 10024
Content-Type: multipart/form-data; boundary=----------------------------3ddd9c41c091
"
나는 (의 트위터 데브 페이지에서 사본 - pastaed 올바른 비밀을 사용하는 것이 매우 확신 내 응용 프로그램) 거기도 내 개인 비밀 토큰을 생성했습니다
[업데이트 2011-09-21 ~ 10 : 45] PHP lib (C++/CLI로 다시 작성)를 사용하고 있으며 C++ lib가 PHP Lib과 동일한 결과를 생성합니다. (Authorization 헤더 문자열).
어떤 이유로 나는 상태가 계속됩니다. (401) Unauthorized. System.Net.WebClient를 사용하여 요청합니다. UploadValues를 사용하여 값을 업로드하십시오.
UploadData와 같은 것을 사용하거나 WebClient 대신 WebRequest를 사용하면 Status : (500) Internal Server 오류가 발생합니다.
필요 (하지만 물론 나는 비밀을 알려주지 않음)이 내 basestring 및 권한 부여 문자열이 어떻게 보이는지, 예를 들면
에게 만약 내가 모든 문자열과 내가 생성 헤더를 제공 할 수 있습니다와 같은 :
BaseString: POST&https%3A%2F%2Fupload.twitter.com%2F1%2Fstatuses%2Fupdate_with_media.json&oauth_consumer_key%3DL9AWIB6jvxm3Req1XWHxJA%26oauth_nonce%3Ddb0ca1f6c926c1d3ae0d9cbb2c349ae2%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1316538778%26oauth_token%3D373846001-bJYH4C47vk34yfIH3XbpvvfZjd2JrIX9OlO5MyO2%26oauth_version%3D1.0
Authorization: OAuth oauth_consumer_key="L9AWIB6jvxm3Req1XWHxJA", oauth_nonce="db0ca1f6c926c1d3ae0d9cbb2c349ae2", oauth_signature="OGI4ZDVkYjZjNjA3YWMyZGYxNWYzZDBhNDE0ODcwMzRkMDE4OWZiYQ%3D%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1316538778", oauth_token="373846001-bJYH4C47vk34yfIH3XbpvvfZjd2JrIX9OlO5MyO2", oauth_version="1.0"
다음은 더 이상 유효하지 않은 이전 텍스트입니다.
나는 간단한 질문 일지 모르지만 나는 이것을 알 수 없다. 나는 필요한 비밀 토큰을 얻기 위해 Twitterizer을 사용하고 있습니다. 이 라이브러리는 또한 새로운 트윗으로 트위터를 업데이트하는 방법을 제공하지만 새로운 update_with_media 호출을 지원하지 않습니다.
내가 한 가지 방법 (의사 C#을 -code) 웹 클라이언트를 사용하여 WebRequest 클래스와 다른 방법을 사용하여 여러 가지 방법을 시도했다 : 내가 뭐하는 거지 경우
string URL = "https://upload.twitter.com/1/statuses/update_with_media.json?oauth_consumer_secret=[mysecretgoeshere]&oauth_token_secret=[usersecretgoeshere]";
System.Net.ServicePointManager.Expect100Continue = false;
Byte[] fileData = File.ReadAllBytes(pathToFile);
#if useWebRequest
string postString = "status={statusgoeshere}&image[]={Encoding.ASCII.GetString(fileData)}";
Byte[] postData = Encoding.ASCII.GetBytes(postString);
WebRequest wr = WebRequest.Create(URL);
wr.Method = "POST";
wr.ContentType = "multipart/form-data"; //as required by twitter API
wr.ContentLength = postData.Length;
IO.Stream rqstream = wr.GetRequestStream();
rqstream.Write(postData,0,postData.Length);
rqstream.Close();
wr.GetResponse(); //returns status 500 internal server error
#else
WebClient client = new WebClient();
NameValueCollection postData = new NameValueCollection();
postData.Add("status", "{statusgoeshere}");
postData.add("media[]", Encoding.ASCII.GetString(fileData));
client.UploadValues(URL, "POST", postData); //returns status 401 not authorized
#endif
나는 내가 잘못 (뭐하는 거지 궁금해 그것은 잘못된 것입니다.) 두 가지 방법 모두 내 눈에 띄는 것 같지만 몇 가지를 놓칠 수 있습니다.
Edit1 : 잘못된 방법으로 선서 매개 변수를 전달하는 것으로 나타났습니다. 해당 부분을 시도하고 업데이트합니다.
나는 더 관련성이 높은 최신 정보로 질문을 업데이트했습니다. –
OAuth 비밀 값은 인터넷을 통해 전송되지 않습니다. 그것들은 (다른 모든 쿼리 문자열 및/또는 폼 값과 함께) 서명을 생성하는 데 사용됩니다. –
@RickySmith 예, tmhOAuth PHP 라이브러리를 통해 작업 한 후이를 발견했습니다. –