Php Curl 在本地机器上返回数据,但在服务器上返回 bool false

Posted

技术标签:

【中文标题】Php Curl 在本地机器上返回数据,但在服务器上返回 bool false【英文标题】:Php Curl returns data on local machine but bool false on server 【发布时间】:2017-10-24 23:13:23 【问题描述】:

我正在尝试获取 facebook 访问令牌

但是从浏览器和本地机器 php 脚本执行的 url 返回真实的数据值。但是,当我从服务器运行相同的脚本时,它会失败并显示 bool(false)

网址

   $token_url = "https://graph.facebook.com/oauth/access_token?"
    . "client_id=".$config['appId']."&redirect_uri=" . urlencode($config['callback_url'])
    . "&client_secret=".$config['secret']."&code=" . $_GET['code'];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $token_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $response = curl_exec ($ch);

    var_dump($response);

其他 url 在服务器上工作。

这里有什么问题?

【问题讨论】:

可以用cURL获取其他网页吗? facebook 可能在您的虚拟主机上被阻止,或者 cURL 一起被阻止。 是的,我可以获取其他网页 但是……你能得到其他的“https”网址吗? 是的...我可以获取其他 https 网址。我试过这个页面,它成功了! 调试curl时,使用CURLOPT_VERBOSE...CURLOPT_VERBOSE说什么? curl_setopt_array($ch,array(CURLOPT_VERBOSE=>true,CURLOPT_STDERR=>STDOUT)); 【参考方案1】:

我的服务器 Hostinger(免费)不允许连接到 Facebook SDK 的其他问题之一的赞成答案让我了解了!!!

我要迁移到付费服务器!

【讨论】:

【参考方案2】:

您应该查看curl error 而不是只查看 curl_exec 结果:

PHP 4 >= 4.0.3, PHP 5, PHP 7) curl_error — 返回包含当前会话的最后一个错误的字符串

试试这个:

if(curl_exec($ch) === false) 
    echo 'Curl error: ' . curl_error($ch);
 else 
    echo 'Operation completed without any errors';



curl_close($ch);

更新

尝试设置:

'curl' => [ CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4]

更多详情请查看here

【讨论】:

我收到 Curl 错误:无法连接到 graph.facebook.com 端口 443:连接被拒绝。应该是什么原因? @user3526204 facebook 可能会阻止您的服务器或您的服务器不允许 https 连接。这通常是使用免费虚拟主机来防止垃圾邮件的情况。 @thepieterdc 是的,这似乎是问题所在。我已将其更新为答案【参考方案3】:

尝试检查curl_error

curl_error — 返回包含当前会话的最后一个错误的字符串

这可能有助于找出问题所在。

【讨论】:

比@lloiaconi 回答晚了几秒; ) 别担心,我已经投了赞成票。我收到 Curl 错误:无法连接到 graph.facebook.com 端口 443:连接被拒绝。会是什么原因? 尝试添加curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 那么也许您的主机不允许连接到 Facebook SDK ?或者无法路由解析为 ipv6 的域? 是的,这似乎是问题所在。我已将其更新为答案

以上是关于Php Curl 在本地机器上返回数据,但在服务器上返回 bool false的主要内容,如果未能解决你的问题,请参考以下文章

php curl 在本地 XAMPP 上返回空字符串,但是相同的代码在生产服务器上返回正确的字符串

laravel 在本地机器上返回 json 字符串,但在弹性 beanstalk 实例上返回整数

PHP CURL 对于本地主机来说太慢了

PHP CURL 对于本地主机来说太慢了

PHP - curl_exec 需要 100 毫秒

Windows 7 中的 XAMPP 1.7.7 使用 curl 不返回任何内容