我正在使用Twitterizer库将网站内的推文发布到我的 Twitter 帐户中。它在现场运行良好,在我的本地服务器上运行(通过 twitter 应用程序使用 OAuth 进行身份验证并发布推文)。但是当我尝试在生产服务器上发布推文时,Twitterizer 说:“结果 =未经授权。错误消息 =无法使用 OAuth 进行身份验证。”
我仔细检查了消费者密钥,还尝试重置密钥并重试 - 结果相同。
Twitter 应用程序具有对我的 Twitter 帐户的读/写访问权限,并且没有被阻止。这个问题在成功工作了大约一个月后突然出现,当时每隔一小时左右就会发布一次推文。
这里有什么问题?
更新 似乎,其他人也面临这个问题:https ://dev.twitter.com/discussions/305
更新 2 最后,我发现了导致问题出现在我的案例中的原因。生产服务器上的 Web 应用程序尝试使用 140 个字符更新状态(由 String.Length 属性测量)。第一个字符是 unicode Character 'LEFT-TO-RIGHT MARK' (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);
}