[英]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.