[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库的工作;-) –