我正在使用Twitterizer库将网站中的推文发布到我的Twitter帐户中。它可以在我的本地服务器上运行的网站上正常运行(通过Twitter应用通过OAuth进行身份验证并发布推文)。
但是,当我尝试在生产服务器上发布推文时,Twitterizer说:“结果=未经授权。ErrorMessage=无法通过OAuth进行身份验证。”

我仔细检查了消费者密钥,还尝试重置密钥,然后重试-同样的结果。

Twitter应用程序具有对我的Twitter帐户的读/写访问权限,未被阻止。
在大约一个月的成功工作一段时间后,每小时大约发布一条推文,此问题突然出现。

这里有什么问题?

更新
看来其他人也面临这个问题:https://dev.twitter.com/discussions/305

更新2
最终,我发现了导致问题在我的情况下出现的原因。生产服务器上的Web应用程序尝试使用140个字符(由String.Length属性测量)更新状态。第一个字符是Unicode字符“左向右标记”(U + 200E)。因此,此文本没有更改就传递给TwitterStatus.Update(..)。我调试了Twitterizer的一些源,并注意到oauth_signature(= hash)的计算不正确。 oauth_signature是从实际请求的另一个URL生成的。我还没有弄清发生此错误的原因和时间,并且可能会在未来几天内写出更多信息。

更新3
我尝试使用新版本的Twitterizer(2.3.3)发布相同的消息,但未发生任何错误。问题消失了。

这是我用来发布推文的代码:

OAuthTokens tokens = new OAuthTokens();
tokens.AccessToken = ConfigurationManager.AppSettings["twitterAccessToken"];
tokens.AccessTokenSecret = ConfigurationManager.AppSettings["twitterAccessTokenSecret"];
tokens.ConsumerKey = ConfigurationManager.AppSettings["twitterAutoPosterConsumerKey"];
tokens.ConsumerSecret = ConfigurationManager.AppSettings["twitterAutoPosterConsumerSecret"];

string text = "Some text";

TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, text);
if (tweetResponse.Result == RequestResult.Success)
{
    // Tweet posted successfully!
    _log.InfoFormat("Posted a tweet #{0}.", tweetResponse.ResponseObject.Id);
}
else
{
    _log.ErrorFormat("Error occured while posting a tweet. Result = {0}. ErrorMessage = {1}",
        tweetResponse.Result, tweetResponse.ErrorMessage);
}

最佳答案

请检查消息,如果消息中带有撇号('),请替换为&amp;#39;

请注意,&amp;#39;将算作5个字符。

我认为撇号将影响发送到Twitter的请求包,使Twitter无法正确获取令牌,因此我们将收到错误“无法通过OAuth进行身份验证”。

09-26 08:35