[Update 2011-09-21 11:19] 我修復了一個導致問題的問題,那就是GMT/GMT +2 我的當地時間是格林尼治標準時間+2,而twitter使用的是格林威治標準時間+ 0/UTC。這導致時間戳越界錯誤。如何使用API函數將照片上傳到twitter?狀態/ update_with_media
我現在固定的問題,現在所面臨的一個問題: 串(96)「{」請求「:」/1 /狀態/ update_with_media.json「‘錯誤’:」無法使用OAuth認證「}」
這是(使用curl)通過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
"
我相當肯定,我使用了正確的密碼(從Twitter的開發頁面複製pastaed我的申請)在那裏我也產生了我的私人祕密令牌
[2011-09-21更新〜10:45] 所以我周圍使用PHP LIB得到(改寫成C++/CLI)和我的C++ lib應該產生完全相同的結果作爲PHP庫。 (授權標題字符串)。
由於某種原因,我總是得到一個狀態:(401)未經授權。 我正在使用System.Net.WebClient發出請求。並使用UploadValues,以及上傳值。
如果我使用UploadData或使用WebRequest而不是WebClient,則會出現狀態:(500)內部服務器錯誤。
如果需要的話(但我當然不會給出祕密)
這是什麼例如我即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爲我提供所需的祕密令牌。該庫還提供了一種使用新推文更新您的Twitter的方法,但它不支持新的update_with_media調用。
我嘗試了幾種方法,通過使用WebRequest類和其他方式使用Web客戶端(僞C#-code)的一種方法:
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庫的工作;-) –