【发布时间】:2013-12-17 22:50:28
【问题描述】:
我正在尝试发布 Twitter 状态更新,但我无法正常工作。
var consumer = new TwitterConsumer(); // WebConsumer implementation
var httpClient = new HttpClient(consumer.CreateAuthorizingHandler("THE_TOKEN", new HttpClientHandler()));
var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"status", "test"}
});
// yes, yes, ugly code, only testing here
var s = httpClient.PostAsync("https://api.twitter.com/1.1/statuses/update.json", content);
var t = s.Result;
var u = t.Content.ReadAsStringAsync().Result; // HTTP 401, response from Twitter is {"errors":[{"message":"Could not authenticate you","code":32}]}
当然,最初我认为我的身份验证令牌或 OAuth 过程存在一些问题,但所有其他事情都正常:
OAuth 身份验证似乎有效,因为我可以访问其他 API 方法,例如 https://api.twitter.com/1.1/account/settings.json。
我什至可以在通过 URI 提交status 时发布状态更新,例如POST https://api.twitter.com/1.1/statuses/update.json?status=test。当我尝试将 status 放入请求正文时,我只会收到错误消息。
根据谷歌很多人有类似的问题,不幸的是建议的解决方案(如仔细检查 url 编码或content-Request-Header)对我不起作用(请求看起来应该在提琴手)。
【问题讨论】:
-
api.twitter.com/1.1/statuses/update.json 只接受 POST 方法,所以我不确定您是否可以通过 GET 方法提交状态更新。
-
将 account/settings.json API 方法中的 HTTP“授权”请求标头与 statuses/update.json 中的“授权”HTTP 请求标头进行比较,并检查“oauth_consumer_key”、“oauth_signature_method”、“ oauth_nonce”、“oauth_token”、“oauth_signature”,还要检查 Content-Type 标头,这可能有助于您找到问题。
-
vzamanillo,GET 方法绝对有效。我不认为我的问题在于 OAuth 身份验证,因为我在 API 上尝试的所有其他方法都可以正常工作。只是不是发布新状态。
-
dev.twitter.com/docs/api/1.1/post/statuses/update,如果您尝试使用 GET,您将收到错误消息。你用的是什么api版本?
-
对不起,我错了 :( 我仔细检查了,确实我使用了 POST 请求,但是将
status参数添加到 URL 而不是正文中。所以我使用了 POST 请求,但是一个 GET 参数 - 我会相应地更新我的问题。为混淆道歉。
标签: c# twitter dotnetopenauth dotnet-httpclient