繁体   English   中英

亚伯拉罕·威廉姆斯(Abraham Williams)Twitter OAuth 303错误

[英]Abraham Williams Twitter OAuth 303 Error

编辑:很抱歉使这个线程,因为我已经解决了这个问题。

这是发生的情况:首先,我注意到发送的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后尝试对其进行处理。 那是我得到303 HTTP代码的时候。 然后,我将实现更改为他在自己的github站点上实现的方式,但仍然遇到相同的问题。 有人知道发生了什么吗?

apitest.php是发生问题的地方,其中$ connection变量具有303 HTTP代码。 redirect.php和callback.php中相应的$ connection变量都返回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错误的原因以及如何解决? 任何帮助将不胜感激。 谢谢!

303响应是重定向。 我的猜测是您需要在请求的URL末尾添加.json(或您使用的任何格式)。

即,您需要请求“ account / verify_credentials.json”,而不是“ account / verify_credentials”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM