2010-05-24 103 views
2

我正在使用用戶名 和密碼的基本身份驗證方法轉移到基於OAuth的身份驗證。使用OAuth和PEAR服務獲取twitter請求令牌時出錯_移動端

我用的是舊版本的梨包Services_Twitter,即 不支持的OAuth。 此軟件包的最新版本支持OAuth身份驗證,它具有一些依賴關係(HTTP_Request2,HTTP_OAuth)。

安裝它們並升級包裝非常簡單。我做了所有 這是我的本地機器,並且沒有任何問題獲得身份驗證 並正在運行。

我犯了這個代碼來測試現場,但每一次的代碼 請求「請求令牌」我得到了以下錯誤消息「無法 連接到SSL://api.twitter.com:443。錯誤#0"

我花6小時確保所有的PEAR包凡達 到目前爲止,檢查客戶令牌和令牌密鑰,確保 443端口未關閉......除了各種其他測試。

我已經用盡了我的資源,我到你們這裏來,希望找到一些 答案。

謝謝

PD:其中一件事我不明白的是,爲什麼有消息稱 URL是SSL://api.twitter.com:443,而不是 https://api.twitter.com/request_token?前者是我用來獲得請求令牌的那個 。

回答

3

「無法連接到ssl:// _______:443。錯誤#0」通常意味着存在ssl_verify_peer或證書匹配問題 - 並且twitter API不要求您提供證書!

HTTP_Request2默認情況下將ssl_verify_peer選項設置爲true - 如果您指定證書來建立連接,那麼您可能需要檢查該設置是否已關閉,這很好嗎?

如果啓用use_ssl配置設置,那麼在Services_Twitter中檢查這個設置,因此猜測您可能需要檢查設置?

例如爲:

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

非常感謝,我花了一段時間才弄清楚如何做到這一點,但它一旦我關閉了SSL。我將發佈下面的代碼 – Onema 2010-05-26 22:33:36

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的想法,導致解決這個問題。這只是代碼。

相關問題