Я использую библиотеку Twitterizer для размещения твитов на веб-сайте в моей учетной записи Twitter. Он отлично работает на сайте, работает на моем локальном сервере (аутентифицируется с помощью OAuth через твиттер-приложение и публикует твит).
Но когда я пытаюсь опубликовать твит на сервере production , Twitterizer говорит: «Result = Unauthorized . ErrorMessage = Не удалось аутентифицироваться с OAuth ."
Я дважды проверил ключи потребителя, также попытался сбросить ключи и повторить попытку - тот же результат.
Приложение Twitter имеет доступ для чтения / записи к моей учетной записи Twitter и не блокируется.
Эта проблема возникла внезапно после периода успешной работы в течение месяца, когда твиты публиковались каждый час или около того.
В чем здесь проблема?
UPDATE
Похоже, что другие парни тоже сталкиваются с этой проблемой: https://dev.twitter.com/discussions/305
ОБНОВЛЕНИЕ 2
Наконец, я выяснил, что вызвало проблему в моем случае. Веб-приложение на рабочем сервере пыталось обновить состояние с 140 символами (измеряется свойством String.Length) И первым персонажем был персонаж Юникод «ЛЕВЫЙ К ПРАВОЙ МАРКЕ» (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);
}