将 media_ids 添加到 Twitter API 调用会导致身份验证问题
Adding media_ids to Twitter API call causes authentication issue
我有一个简单的网页,它可以通过 Twitter REST API 在 https://api.twitter.com/1.1/statuses/update.json sucessfully. I am also able to upload a JPG image to Twitter with https://upload.twitter.com/1.1/media/upload.json 创建纯文本推文,并成功返回数字 media_id
。 我不能做的是将这两个放在一起创建图像推文:如果我添加 media_id!
,它会得到 HTTP 状态代码 401
我正在使用 ASP.NET(我有 VB 和 C# 示例)但我认为问题并非特定于此语言。我正在更改的推文代码中仅有的两位是构建相同 'querystring' 的地方:
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);
}
所有这一切实际上是将 &media_ids=1104003004334784512
附加到字符串的末尾。我的其余代码没有改变。
我返回的JSON是:
{"errors":[{"code":32, "message":"Could not authenticate you."}]}
如果我删除 &media_ids=12345678901234567
则代码成功(HTTP 状态代码 200,并且返回了很多有用的 JSON)。
与纯文本推文相比,我认为创建图片推文不需要任何特殊权限。我读过各种博客,其中提到人们在使用 media_ids 时遇到间歇性 HTTP 401 错误,这与身份验证完全无关,但他们提供的 none 解决方案适用于我的情况。
文档显示我的 media_id 可以使用 2 小时,所以当我的纯文本推文出现在我的 Twitter 个人资料上时,我怎么能把身份验证搞得一团糟好吗?
Twitter 要求 API 请求使用 OAuth 1.0a authentication。需要注意的是,必须以非常特定的格式创建 HMAC-SHA1 签名。
在这种情况下,它要求 baseFormat
按字母顺序排序 - 请参阅 https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html
我有一个简单的网页,它可以通过 Twitter REST API 在 https://api.twitter.com/1.1/statuses/update.json sucessfully. I am also able to upload a JPG image to Twitter with https://upload.twitter.com/1.1/media/upload.json 创建纯文本推文,并成功返回数字 media_id
。 我不能做的是将这两个放在一起创建图像推文:如果我添加 media_id!
我正在使用 ASP.NET(我有 VB 和 C# 示例)但我认为问题并非特定于此语言。我正在更改的推文代码中仅有的两位是构建相同 'querystring' 的地方:
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);
}
所有这一切实际上是将 &media_ids=1104003004334784512
附加到字符串的末尾。我的其余代码没有改变。
我返回的JSON是:
{"errors":[{"code":32, "message":"Could not authenticate you."}]}
如果我删除 &media_ids=12345678901234567
则代码成功(HTTP 状态代码 200,并且返回了很多有用的 JSON)。
与纯文本推文相比,我认为创建图片推文不需要任何特殊权限。我读过各种博客,其中提到人们在使用 media_ids 时遇到间歇性 HTTP 401 错误,这与身份验证完全无关,但他们提供的 none 解决方案适用于我的情况。
文档显示我的 media_id 可以使用 2 小时,所以当我的纯文本推文出现在我的 Twitter 个人资料上时,我怎么能把身份验证搞得一团糟好吗?
Twitter 要求 API 请求使用 OAuth 1.0a authentication。需要注意的是,必须以非常特定的格式创建 HMAC-SHA1 签名。
在这种情况下,它要求 baseFormat
按字母顺序排序 - 请参阅 https://developer.twitter.com/en/docs/basics/authentication/guides/creating-a-signature.html