【问题标题】:Not getting any error message or content from cURL没有从 cURL 收到任何错误消息或内容
【发布时间】:2017-01-07 14:45:01
【问题描述】:

使用下面的代码我没有收到任何错误或内容。

我有兴趣获取我的网站http://www.aptamitra.in 的内容。

$cookie = tempnam ("/tmp", "CURLCOOKIE");
$ch = curl_init();
//$timeout = 5;
curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
curl_setopt( $ch, CURLOPT_URL, "http://www.aptamitra.in" );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_ENCODING, "" );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );    # required for https urls
//curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
//curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
//curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
$content = curl_exec( $ch );
$response = curl_getinfo( $ch );
var_dump($content);
echo "<pre>";
print_r($response);  // iam getting response here.
curl_close ( $ch );

我使用var_dump($content)print_r($response)得到的数组如下所示

布尔(假) 大批 ( [网址] => http://www.aptamitra.in/ [内容类型] => 文本/html;字符集=UTF-8 [http_code] => 302 [header_size] => 4956 [请求大小] => 4984 [文件时间] => -1 [ssl_verify_result] => 0 [redirect_count] => 20 [总时间] => 0.452 [名称查找时间] => 0 [连接时间] => 0 [pretransfer_time] => 0 [大小上传] => 0 [大小下载] => 0 [速度下载] => 0 [速度上传] => 0 [下载内容长度] => 0 [上传内容长度] => -1 [starttransfer_time] => 0.124 [重定向时间] => 0.328 [redirect_url] => [primary_ip] => 127.0.0.1 [certinfo] => 数组 ( ) [primary_port] => 1080 [local_ip] => 127.0.0.1 [本地端口] => 52230 )

不知道为什么没有内容。

【问题讨论】:

  • 您收到 302 重定向,因此没有内容,但您打开了 CURLOPT_FOLLOWLOCATION,它应该遵循该重定向。令人费解!
  • @sherif,是的,我没有收到内容或错误消息
  • 回声 curl_error($ch);在 curl_exec() 之前粘贴;并知道错误
  • 是的@jedifans 它在
  • 如果您尝试加载 http://www.aptamitra.in/ 而不是 http://www.aptamitra.in 会发生什么? (所以,以 / 结尾)

标签: php curl


【解决方案1】:

希望这可行

 $options = array(
  CURLOPT_CUSTOMREQUEST  =>"GET",        //set request type post or get
  CURLOPT_POST           =>false,        //set to GET
  CURLOPT_USERAGENT      => 'Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0', //set user agent
  CURLOPT_RETURNTRANSFER => true,     // return web page
  CURLOPT_HEADER         => false,    // don't return headers
  CURLOPT_FOLLOWLOCATION => true,     // follow redirects
  CURLOPT_ENCODING       => "",       // handle all encodings
  CURLOPT_AUTOREFERER    => true,     // set referer on redirect
  CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
  CURLOPT_TIMEOUT        => 120,      // timeout on response
  CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
);

$ch      = curl_init("http://www.aptamitra.in/");
curl_setopt_array( $ch, $options );    
echo curl_exec( $ch );    
curl_close( $ch );

【讨论】:

  • 我得到与上面代码(我的代码)相同的响应,没有任何改变
【解决方案2】:

使用以下我可以打印页面内容。

function mmcurl( $url=NULL, $data=array(), $options=NULL ){

    /* Download cacert.pem and change path here to suit */
    $cacert='c:/wwwroot/cacert.pem';
    $cookiejar=tempnam( sys_get_temp_dir(), '_cookiejar_' );                    


    $curl=curl_init();
    if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
        curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
        curl_setopt( $curl, CURLOPT_CAINFO, realpath( $cacert ) );
    }
    curl_setopt( $curl, CURLOPT_URL,trim( $url ) );
    curl_setopt( $curl, CURLOPT_AUTOREFERER, TRUE );
    curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, TRUE );
    curl_setopt( $curl, CURLOPT_FRESH_CONNECT, TRUE );
    curl_setopt( $curl, CURLOPT_HEADER, FALSE );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0' );
    curl_setopt( $curl, CURLOPT_ENCODING, '' );

    if( $options->cookie ){
        curl_setopt( $curl, CURLOPT_COOKIEFILE, $cookiejar );
        curl_setopt( $curl, CURLOPT_COOKIEJAR, $cookiejar );
        curl_setopt( $curl, CURLOPT_COOKIE, $cookiejar );
    }
    if( $options->post ){
        curl_setopt( $curl, CURLOPT_POST, true );
        curl_setopt( $curl, CURLOPT_POSTFIELDS, http_build_query( $data ) );
    }
    $res=(object)array(
        'response'  =>  curl_exec( $curl ),
        'info'      =>  curl_getinfo( $curl ),
        'errors'    =>  curl_error( $curl ),
        'cookie'    =>  $cookiejar
    );
    curl_close( $curl );
    return $res;
}



$url='http://www.aptamitra.in';
$data=array();
$options=new StdClass;
$options->post=false;
$options->cookie=true;


$res=mmcurl( $url, $data, $options );
echo '<pre>',print_r($res,true),'</pre>';

【讨论】:

  • 你的代码输出看起来像(我有 cacert.pem)这个
  • ?代码返回给定 url 的 html - 如果有进一步的处理很容易完成,您可以继续将其加载到 DOMDocument 中
  • ,是的,你是对的 100% 这是服务器问题。我该如何解决它,请帮助我。
【解决方案3】:

根据curl_exec() 文档:

成功时返回 TRUE,失败时返回 FALSE。但是,如果设置了CURLOPT_RETURNTRANSFER 选项,它将在成功时返回结果,在失败时返回 FALSE。

您对var_dump($content); 的调用显示bool(false),这意味着curl_exec() 失败。这就是为什么您没有收到任何响应内容的原因。使用curl_errno() 和/或curl_error() 找出失败的原因。

我注意到的一件事是curl_getinfo() 正在报告[redirect_count] =&gt; 20。这是 很多 的重定向。服务器可能陷入无休止的重定向循环,curl_exec() 决定在一段时间后失败。见CURLOPT_MAXREDIRS。检查上报的错误号是否为CURLE_TOO_MANY_REDIRECTS

【讨论】:

  • @RemyLebeu,错误是 Curl 错误:遵循最大 (20) 个重定向
  • @user5405873 好吧,你去吧。现在您必须找到服务器重定向到的每个 URL,并确保 curl 正确重定向。这是一个服务器错误,即使 curl 正在请求它一遍又一遍地重定向到同一个 URL,或者更可能 curl 没有发送服务器期望的内容,因此它使用重定向来尝试强制它。
  • ,您所说的是 100% 正确的。这是服务器错误,我现在该怎么办。
  • ,我通过你得到了我的解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多