簡體   English   中英

無法使用亞伯拉罕的 TwitterOAuth for PHP 獲取令牌; 返回 HTTP 500

[英]Unable to obtain token using Abraham's TwitterOAuth for PHP; HTTP 500 returned

我正在嘗試將@abrahamTwitterOAuth 0.5.3 庫用於 PHP,但是當我發出請求以請求3 條腿授權的令牌時,我收到了 HTTP 500 作為響應。

這是我在 PHP 中設置代碼的方式:

<?php

/* Start session and load library. */
session_start();

require_once('config.php');

require_once('twitteroauth/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;

/* Build TwitterOAuth object with client credentials. */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

/* Get temporary credentials. */
// Error occurs on the following line, unable to dump $request_token 
$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));

//print_r($request_token); // <-- Never reached!!

我知道這個問題不在 Twitter API 中,因為我已經驗證我可以通過開發控制台訪問我的 Twitter 帳戶。

此外,通過遵循庫提供的授權流程示例,我在某種程度上驗證了 TwiterOAuth 庫是否正常工作。 該示例還可以訪問我的 Twitter 帳戶。

我只是無法弄清楚發生了什么,因為我無法正確授權我的 PHP 應用程序訪問我的 Twitter 帳戶。

我究竟做錯了什么?

事實證明,從未獲得響應。 結果,嘗試處理響應,當沒有響應時會導致服務器端出現錯誤。

Twitter OAuth 依賴的 PHP 函數之一是 curl。 我已經測試過curl_init存在:

print function_exists('curl_init') ? 'curl_init is enabled' : 'curl_init is disabled';

我錯誤地認為curl_exec也已啟用。 (為什么要啟用curl_init ,而只禁用curl_exec ?)

這個假設是不正確的,因為我的網絡托管服務提供商“出於安全考慮”禁用了curl_exec而我不知道這一點。 此外,我對使用 Twitter API 的調用在過去一直有效,因此這是新行為。

我花了一段時間才回來測試curl_exec 我確認我正在接收一個有效的 TwitterOauth 對象,並最終進入 TwitterOauth 類和請求函數。

我沒有收到 curl 錯誤,但是curl_exec的響應curl_exec為空(不是預期的 TRUE 或 FALSE )。 我認為這是不尋常的,起初以為 curl 缺少配置選項。

然而,事實並非如此。

因此,如果您遇到此庫的問題(過去對我來說非常curl_exec ),則可能是您的托管服務提供商禁用了curl_exec

您可以通過以下 PHP 代碼測試此場景:

print function_exists('curl_exec') ? 'curl_exec is enabled' : 'curl_exec is disabled';

我的問題以另一種方式解決了。 在檢查(根據 jhenderson2099 的答案)我的主機是否啟用了 curl_exec 之后(確實如此)。 我發現我的問題是由 src/TwitterOauth.php(TwitterOauth 類)中的兩行引起的:

$bundlePath = CaBundle::getSystemCaRootBundlePath(); <-- Comment this line
$options = [
        // CURLOPT_VERBOSE => true,
        CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout,
        CURLOPT_HEADER => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_TIMEOUT => $this->timeout,
        CURLOPT_USERAGENT => $this->userAgent,
        $this->curlCaOpt($bundlePath) => $bundlePath,<-- Comment this line
    ];

這樣您的代碼將如下所示:

//$bundlePath = CaBundle::getSystemCaRootBundlePath();
        $options = [
            // CURLOPT_VERBOSE => true,
            CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout,
            CURLOPT_HEADER => true,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_SSL_VERIFYHOST => 2,
            CURLOPT_SSL_VERIFYPEER => true,
            CURLOPT_TIMEOUT => $this->timeout,
            CURLOPT_USERAGENT => $this->userAgent,
            //$this->curlCaOpt($bundlePath) => $bundlePath,
        ];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM