PHP Twitter прокси, который поддерживает XAuth на сервере Apache - PullRequest
1 голос
/ 28 июня 2010

Я уже два дня бьюсь головой об этой проблеме, и я надеюсь, что кто-то на этом сайте может мне помочь.

Я живу в Китае и у меня есть сервер (общий хостинг)расположен в Гонконге.Я настроил прокси-сервер PHP Twitter на сервере и подключаюсь к нему через Twitter для iPhone (AKA Tweetie).Он прекрасно работал в течение прошлого года или около того.

Twitter для iPhone был обновлен вчера и теперь требует авторизацию XAuth для подключения к twitter.com (ранее он использовал Basic Auth).После обновления я не смог аутентифицировать себя, используя мой прокси-сервер, несмотря на внесение (как я считаю,) соответствующих изменений в мой прокси.

Концептуально это не очень сложно.проблема взломать.Для аутентификации на twitter.com с использованием XAuth приложение должно отправить запрос POST на https://api.twitter.com/oauth/access_token. Тело POST должно иметь форму:

x_auth_username=aUserName&x_auth_mode=client_auth&x_auth_password=aPassword

Кроме того, запрос POST должен иметьЗаголовок авторизации в форме:

OAuth oauth_signature_method="HMAC-SHA1", oauth_consumer_key="IQKbtAYlXsomeLGkey0HUA", oauth_nonce="8B265865-3F57-44FF-BCD6-E009EA7D4615", oauth_signature="sbwblaho64blahr934mZQ+23DYQ=", oauth_timestamp="1277356846", oauth_version="1.0"

Итак, я использовал .htaccess для копирования заголовка Auth в переменную $ _REQUEST, используя этот код:

RewriteCond %{HTTP:Authorization} ^OAuth.*
RewriteRule (.*) index.php?OAuth=%{HTTP:Authorization} [QSA,L]

Мой прокси копирует содержимое этой переменной $ _REQUEST в переменную экземпляра с именем $ self-> oauthHeader.Затем я добавляю его в качестве заголовка к моему запросу cURL, используя следующий код:

if (isset($this->oauthHeader)) {    
    $headers[] = 'Authorization: '.$this->oauthHeader;
    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
    $curl_options[CURLOPT_HTTPHEADER] = $headers;
}

Я также добавляю тело POST исходного запроса в тело POST cURL, используя:

$curl_options[CURLOPT_POST] = true;
$curl_options[CURLOPT_POSTFIELDS] = @file_get_contents("php://input");

Я отправляю запрос cURL в Twitter.Кажется, все работает правильно, но я неизбежно получаю ответ «Не удалось проверить подпись и маркер oauth».

Я нахожусь в тупике, и я не могу на всю жизнь думать, что яя делаю неправильноЛюбая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 23 июля 2010

Вы можете использовать это альтернативное решение только для взломанных устройств iOS: http://code.google.com/p/gfwinterceptor/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...