我有一个简单的网页,可以通过https://api.twitter.com/1.1/statuses/update.json上的Twitter REST API成功创建纯文本推文。我还可以使用https://upload.twitter.com/1.1/media/upload.json将JPG图片上传到Twitter,并成功获取数字class Test {
public:
std::thread t;
Test(std::thread&& rt) : t(std::move(rt)) {}
};
int main()
{
std::vector<Test> tests;
{
std::thread t([] {
std::cout << 1;
});
tests.push_back(Test(std::move(t)));
}
for (Test& mytest : tests)
{
mytest.t.join();
}
}
。 我不能做的是将这两者放在一起以创建图像鸣叫:如果我添加media_id,它将获得HTTP状态代码401!
我正在使用ASP.NET(我同时具有VB和C#示例),但我希望问题并不特定于该语言。我要更改的推文代码中仅有的两位是建立相同的“ querystring”的地方:
media_id
和
var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&status={6}&media_ids={7}";
var baseString = string.Format(baseFormat, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, Uri.EscapeDataString(TweetText), TwitterMediaID);
所有这些操作实际上是将var postBody = "status=" + Uri.EscapeDataString(TweetText) + "&media_ids=" + TwitterMediaID;
using (System.IO.Stream stream = request.GetRequestStream())
{
byte[] content = System.Text.ASCIIEncoding.ASCII.GetBytes(postBody);
stream.Write(content, 0, content.Length);
}
附加到字符串的末尾。我的其余代码不会更改。
我返回的JSON是:
&media_ids=1104003004334784512
如果删除{"errors":[{"code":32, "message":"Could not authenticate you."}]}
,则代码成功(HTTP状态码200,并返回了许多有用的JSON)。
与纯文本推文相比,我认为我不需要任何特殊权限即可创建图像推文。我读过很多博客,提到人们在使用media_ids时出现间歇性的HTTP 401错误,这与身份验证完全无关,但是他们提供的解决方案都不适用于我的站点。
文档显示我的media_id可以使用2个小时,因此,当我的纯文本推文出现在我的Twitter个人资料中时,如何弄乱身份验证方面的内容? >
答案 0 :(得分:1)
Twitter要求API请求使用OAuth 1.0a authentication。一个警告是,必须以非常特定的格式创建HMAC-SHA1签名。
在这种情况下,它要求baseFormat
要按字母顺序排序-请参见https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html