Twitterizer: «Не удалось подтвердить подлинность с помощью OAuth» - PullRequest
2 голосов
/ 14 августа 2011

Я использую библиотеку 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);
}

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Пожалуйста, отметьте в сообщении, если в сообщении есть апострофы ('), пожалуйста, замените его на &amp;#39;

Обратите внимание, что &amp;#39; будет считаться как 5 символов.

Я думаю, что апострофыповлияет на пакет запроса, отправляемый в твиттер, который делает твиттер не может получить токен правильно, поэтому мы получим ошибку «Не удалось аутентифицироваться с OAuth».

0 голосов
/ 02 сентября 2011

У меня была такая же проблема.PHP 5.3.1 работал на моем локальном сервере, а PHP 4.3.2 работал на моем производственном сервере.Я использую OAuth-библиотеку Google Code, полученную из приведенного ниже:

http://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript.

Я исследовал заголовок OAuth, который прокси-программа PHP получила из кода JavaScript в браузере.На моем локальном сервере это было

OAuth realm = "", oauth_consumer_key = "XXX", oauth_token = "XXX", oauth_version = "1.0", oauth_timestamp = "1314956434", oauth_nonce = "mF7Tofign" oauth, oauth= "HMAC-SHA1", oauth_signature = "DbuaiDeMhMYNZ5BaQmOoFr% 2FRsEQ% 3D"

в то время как на моем производственном сервере все двойные кавычки, указанные выше, были экранированы, а именно, \ ".к неэкранированному с использованием функции str_replace. Затем он работал точно так же, как и на моем производственном сервере. Причина заключается в том, что двойные кавычки обрабатываются в PHP 5.3.1 и PHP 4.3.2.ошибка "Не удалось аутентифицироваться с OAuth."

...