EDIT:
Я извиняюсь за создание этой темы, так как я выяснил проблему.
Вот что случилось:
Во-первых, я заметил, что отправляемому URL не хватает символа "/" между .com и account / verify_credentials. Когда я обновил это, я получил ошибку 404. Затем я посмотрел на twitteroauth.php и заметил, что верхний:
/* Set up the API root URL. */
public $host = "https://api.twitter.com/1/";
// public $host = "https://dev.twitter.com";
закомментировано. Я раскомментировал его и прокомментировал нижний (который, я полагаю, не перестал существовать или не использовался?), И теперь он отлично работает!
Спасибо всем и спасибо мистеру Уильямсу за великолепную библиотеку Oauth!
Я реализовывал библиотеку Abraham Williams Twitter OAuth, и до сих пор все шло хорошо, пока я не попытался что-то с ней сделать после подключения к Twitter. Именно тогда я получил код HTTP 303. Затем я изменил свою реализацию так, как он реализует ее на своем сайте github, и у меня все еще остается та же проблема. У кого-нибудь есть представление о том, что происходит?
apitest.php - это место, где возникает проблема, где переменная $ connection имеет код HTTP 303. Соответствующие переменные $ connection в redirect.php и callback.php возвращают 200. Кстати, все файлы находятся в одном каталоге.
Вот код:
connect.php (HTML-код на этой странице имеет кнопку, которая переходит на redirect.php)
<?php
/**
* @file
* Check if consumer token is set and if so send user to get a request token.
*/
/**
* Exit with an error message if the CONSUMER_KEY or CONSUMER_SECRET is not defined.
*/
require_once('twitconfig.php');
if (CONSUMER_KEY === '' || CONSUMER_SECRET === '') {
echo 'A consumer key and secret are required.';
exit();
}
?>
redirect.php
<?php
/* Start session and load library. */
session_start();
require_once('twitteroauth.php');
require_once('twitconfig.php');
/* Build TwitterOAuth object with client credentials. */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
/* Get temporary credentials. */
$request_token = $connection->getRequestToken(OAUTH_CALLBACK);
/* Save temporary credentials to session. */
$_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
/* If last connection failed don't display authorization link. */
switch ($connection->http_code) {
case 200:
/* Build authorize URL and redirect user to Twitter. */
$url = $connection->getAuthorizeURL($token);
header('Location: ' . $url);
break;
default:
/* Show notification if something went wrong. */
echo 'Could not connect to Twitter. Refresh the page or try again later.';
}
?>
callback.php
<?php
/**
* @file
* Take the user when they return from Twitter. Get access tokens.
* Verify credentials and redirect to based on response from Twitter.
*/
/* Start session and load lib */
session_start();
require_once('twitteroauth.php');
require_once('twitconfig.php');
/* If the oauth_token is old redirect to the connect page. */
if (isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']) {
$_SESSION['oauth_status'] = 'oldtoken';
header('Location: ./clearsessions.php');
}
/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
/* Request access tokens from twitter */
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);
/* Save the access tokens. Normally these would be saved in a database for future use. */
$_SESSION['access_token'] = $access_token;
/* Remove no longer needed request tokens */
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);
/* If HTTP response is 200 continue otherwise send to connect page to retry */
if (200 == $connection->http_code) {
/* The user has been verified and the access tokens can be saved for future use */
$_SESSION['status'] = 'verified';
header('Location: ./apitest.php');
} else {
/* Save HTTP status for error dialog on connnect page.*/
header('Location: ./clearsessions.php');
}
?>
apitest.php (где проблема видна через print_r)
<?php
session_start();
require_once('twitteroauth.php');
require_once('twitconfig.php');
if (empty($_SESSION['access_token']) || empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret'])) {
header('Location: ./clearsessions.php');
}
/* Get user access tokens out of the session. */
$access_token = $_SESSION['access_token'];
/* Create a TwitterOauth object with consumer/user tokens. */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
/* Get logged in user to help with tests. */
$user = $connection->get('account/verify_credentials');
print_r($connection);
print_r($_SESSION);
?>
Вывод первого оператора печати:
TwitterOAuth Object (
[http_code] => 303
[url] => https://dev.twitter.comaccount/verify_credentials.json?oauth_consumer_key=UoXXKdfnVHh2fYD8Csw&oauth_nonce=09bc369393a8eab3a1dc36eaa6230b45&oauth_signature=pe5dYtYq%2FvlGb0c%2BnRR%2BQAXI0Ec%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1314249851&oauth_token=351699791-F6stFFk81poF8ooORgLLxaE2cpSdDT2Vr0Tz9yJm&oauth_version=1.0
[host] => https://dev.twitter.com
[timeout] => 30
[connecttimeout] => 30
[ssl_verifypeer] =>
[format] => json
[decode_json] => 1
[http_info] => Array ( [url] => https://dev.twitter.comaccount/verify_credentials.json?oauth_consumer_key=UoXXKdfnVHh2fYD8Csw&oauth_nonce=09bc369393a8eab3a1dc36eaa6230b45&oauth_signature=pe5dYtYq%2FvlGb0c%2BnRR%2BQAXI0Ec%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1314249851&oauth_token=351699791-F6stFFk81poF8ooORgLLxaE2cpSdDT2Vr0Tz9yJm&oauth_version=1.0
[content_type] =>
[http_code] => 303
[header_size] => 565
[request_size] => 401
[filetime] => -1
[ssl_verify_result] => 1
[redirect_count] => 0
[total_time] => 0.053773
[namelookup_time] => 0.003355
[connect_time] => 0.006399
[pretransfer_time] => 0.047636
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => 0
[upload_content_length] => 0
[starttransfer_time] => 0.053629
[redirect_time] => 0
[certinfo] => Array ( ) )
[useragent] => TwitterOAuth v0.2.0-beta2
[sha1_method] => OAuthSignatureMethod_HMAC_SHA1 Object ( )
[consumer] => OAuthConsumer Object ( [key] => UoXXKdfnVHh2fYD8Csw [secret] => SyKfxRorvUs6THwj5l26TGEkFOCGf1vG86N7PoS97o [callback_url] => ) [token] => OAuthConsumer Object ( [key] => 351699791-F6stFFk81poF8ooORgLLxaE2cpSdDT2Vr0Tz9yJm [secret] => q8fHaTaFvOUL8XKYX89LSgubr2fSl1xHBUAi8MUqIc [callback_url] => )
[http_header] => Array ( [location] => http://guide.a.id.opendns.com/?url=dev%2Etwitter%2Ecomaccount%2Fverify%5Fcredentials%2Ejson%3Foauth%5Fconsumer%5Fkey%3DUoXXKdfnVHh2fYD8Csw%26oauth%5Fnonce%3D09bc369393a8eab3a1dc36eaa6230b45%26oauth%5Fsignature%3Dpe5dYtYq%252FvlGb0c%252BnRR%252BQAXI0Ec%253D%26oauth%5Fsignature%5Fmethod%3DHMAC%2DSHA1%26oauth%5Ftimestamp%3D1314249851%26oauth%5Ftoken%3D351699791%2DF6stFFk81poF8ooORgLLxaE2cpSdDT2Vr0Tz9yJm%26oauth%5Fversion%3D1%2E0
[content_length] => 0
[connection] => close
[date] => Thu, 25 Aug 2011 05:24:50 GMT
[server] => OpenDNS Guide ) )
Вывод второго оператора печати:
Array (
[access_token] => Array (
[oauth_token] => 351699791-F6stFFk81poF8ooORgLLxaE2cpSdDT2Vr0Tz9yJm
[oauth_token_secret] => q8fHaTaFvOUL8XKYX89LSgubr2fSl1xHBUAi8MUqIc
[user_id] => 351699791
[screen_name] => jibjib21 )
[status] => verified )
Кто-нибудь имеет представление о том, что происходит с этой ошибкой 303 и как ее устранить? Любая помощь будет принята с благодарностью. Спасибо!