CURL执行返回空响应并显示

时间:2013-05-27 08:35:11

标签: php curl

我在我的项目中使用CURL,它在本地工作正常,但如果我使用 相同的代码没有执行,我试图调试它。输出如下:

Took 0 seconds to send a request to https://www.google.co.in

我使用了以下示例代码:

$handle=curl_init('https://www.google.co.in');
curl_setopt($handle, CURLOPT_VERBOSE, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
$content = curl_exec($handle);

if(!curl_errno($handle))
{
    $info = curl_getinfo($handle);

    echo '<br/> Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}
else
{
    echo 'Curl error: ' . curl_error($handle);
}

echo $content;

问题出在服务器上,我不知道在php.ini中启用什么。

请注意,在服务器中,CURL和SSL已启用。如果有人遇到类似的问题,请分享解决方案。

3 个答案:

答案 0 :(得分:8)

在这种情况下对我来说,问题是我得到的是302重定向而不是实际的获取请求。

从此answer

开启CURLOPT_VERBOSE
$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $fp);

我在errorlog.txt中获得了以下内容:

* Connected to www.example.com (X.X.X.X) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSL connection using ECDHE-RSA-AES128-GCM-SHA256
* Server certificate:
*        subject: OU=Domain Control Validated; OU=COMODO SSL; CN=www.example.com
*        start date: 2016-04-28 00:00:00 GMT
*        expire date: 2018-04-08 23:59:59 GMT
*        issuer: C=GB; ST=Greater Manchester; L=Salford; O=COMODO CA Limited; CN=COMODO RSA Domain Validation Secure Server CA
*        SSL certificate verify ok.
> GET /path/to/file.php
HTTP/1.1^M
Host: www.example.com^M
Accept: */*^M
^M
< HTTP/1.1 302 Found^M
* Server nginx is not blacklisted
< Server: nginx^M
< Date: Tue, 20 Sep 2016 02:06:45 GMT^M
< Content-Type: text/html^M
< Transfer-Encoding: chunked^M
< Connection: keep-alive^M
< X-Powered-By: PHP/5.5.9-1ubuntu4.19^M
< Location: https://www.example.com/other/url/^M
< ^M
* Connection #0 to host www.example.com left intact

N.B。

  1. HTTP/1.1 302 Found(应该只是200回复​​)
  2. Location: https://www.example.com/other/url/GET请求网址
  3. 不同

答案 1 :(得分:4)

  

问题:

     

功能curl_exec已停用。怎么办?

     

解决方案:

     

为了消除此错误消息,您需要执行以下操作一个

     
      
  1. curl_exec文件中的disable_functions删除php.ini字符串
  2.   
  3. 如果您无法访问php.ini文件
  4. ,请让您的托管服务提供商删除上面的字符串   
  5. 将托管服务提供商更改为允许运行curl_exec功能的提供商。
  6.         

    以下是php.ini中的条目示例。

         

    更改自:

         

    disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,show_source,eval,posix_getpwuid

         

    要:

         

    disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,show_source,eval,posix_getpwuid

来源:http://tipstricks.itmatrix.eu/?p=1365

答案 2 :(得分:-2)

您可以做的是在实时环境中使用下面的代码测试您的代码以确定错误

error_reporting(E_ALL);

根据您提出的请求尝试添加标头。

用于调试目的。

Php - Debugging Curl

http://www.tuxradar.com/practicalphp/15/10/4