我正在使用用户名从基本身份验证方法转移 和基于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?前一个就是我 用来获取请求令牌。答案 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)的攻击。所以不要;)