使用OAuth和PEAR Services_Twitter获取Twitter请求令牌时出错

时间:2010-05-24 17:42:22

标签: api authentication twitter oauth pear

我正在使用用户名从基本身份验证方法转移 和基于OAuth身份验证的密码。

我正在使用旧版本的pear包Services_Twitter 不支持OAuth。 该软件包的最新版本支持OAuth认证 有几个依赖项(HTTP_Request2,HTTP_OAuth)。

安装它们并升级包非常简单。我做了所有 这是我的本地机器,并没有遇到身份验证的麻烦 并且正在运行。

我将此代码提交到测试站点,但每次都是代码 请求“请求令牌”我收到以下错误消息“无法 连接到 ssl://api.twitter.com:443。错误#0“

我花了6个小时确保所有的梨包都在哪里 到目前为止,检查客户令牌和令牌秘密,确保 除了各种其他测试外,443端口没有关闭。

我已经耗尽了我的资源,我来找你,希望找到一些 答案。

谢谢

PD:我不明白的一件事是为什么消息说 网址是ssl://api.twitter.com:443而不是 https://api.twitter.com/request_token?前一个就是我 用来获取请求令牌。

3 个答案:

答案 0 :(得分:3)

“无法连接到ssl:// _______:443。错误#0”通常表示存在ssl_verify_peer或证书匹配问题 - 而twitter API不要求您提供证书!

HTTP_Request2默认情况下将ssl_verify_peer选项设置为true - 如果您要指定用于建立连接的证书,那么这很好,所以您可能需要检查该设置是否已关闭?

如果启用了use_ssl配置设置,那么会在Services_Twitter中为您检查,所以猜测您可能需要检查是否已设置?

e.g:

$twitter = Services_Twitter_factory('statuses/update', true, array('use_ssl' => true));

答案 1 :(得分:3)

以下是kguest答案代码的实现。


$httpRequest = new HTTP_Request2(  null,
                                   HTTP_Request2::METHOD_GET , 
                                   array ('ssl_verify_peer'   => false, 
                                          'ssl_verify_host'   => false) 
                                         );
$httpRequest->setHeader('Accept-Encoding', '.*');
$request = new HTTP_OAuth_Consumer_Request;
$request->accept($httpRequest);


$oauth = new HTTP_OAuth_Consumer('twitterConsumerKey','twitterConsumerSecret');
$oauth->accept($request);

$oauth->getRequestToken('https://api.twitter.com/oauth/request_token',
                        "path/to/call/back/file.php"); 

$_SESSION['token']        = $oauth->getToken();
$_SESSION['token_secret'] = $oauth->getTokenSecret();

$authorize_link_twitter = $oauth->getAuthorizeUrl('https://api.twitter.com/oauth/authorize');

和一些非常相似的东西在你从twitter回来后获得访问令牌。


        $httpRequest = new HTTP_Request2( null,
                                          HTTP_Request2::METHOD_GET , 
                                          array ('ssl_verify_peer'   => false, 
                                                 'ssl_verify_host'   => false) 
                                         );
        $httpRequest->setHeader('Accept-Encoding', '.*');
        $request = new HTTP_OAuth_Consumer_Request;
        $request->accept($httpRequest);

        $oauth = new HTTP_OAuth_Consumer('twitterConsumerKey', 
                                                 'twitterConsumerSecret', 
                                                 $_SESSION['token'], 
                                                 $_SESSION['token_secret']);
        $oauth->accept($request);

        $oauth->getAccessToken('https://api.twitter.com/oauth/access_token', 
                                       $_GET['oauth_verifier']);

        // you can get the final tokens like this.
        $oauth->getToken());
        $oauth->getTokenSecret();

所有的功劳归功于kguest的想法,导致解决这个问题。这只是代码。

答案 2 :(得分:0)

查看此错误报告http://pear.php.net/bugs/bug.php?id=18061我已添加资源来解决SSL和Services_Twitter包的问题。

但基本上你应该按照http://curl.haxx.se/docs/sslcerts.html

的说明进行操作

禁用ssl_verify_peer和ssl_verify_host会使您容易受到SSL尝试解决的安全攻击(Verifying peer in SSL using python)的攻击。所以不要;)