[英]Unable to obtain token using Abraham's TwitterOAuth for PHP; HTTP 500 returned
我正在嘗試將@abraham的TwitterOAuth 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.