PHP CURL检索部分页面

我有以下CURL代码:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url);
if ($postParameters != '') {
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postParameters);
}
curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__.'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__.'/cookie.txt');
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt($ch, CURLOPT_REFERER, $referer);
$pageResponse = curl_exec($ch); 
curl_close($ch); 

当我尝试抓取页面时,大部分时间我都会看到我要求的整个页面。 但是,我会不时得到页面的一部分,例如:

DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> html xmlns =“http:// www.w3.org/1999/xhtml“dir =”ltr“lang =”en“> head> meta http-equiv =”Content-Type“content =”text / html; charset = windows-1251“/> meta name =“发生器”内容=“

我删除了标签前面的“<”,以便HTML代码在堆栈交换中显示。 有谁知道为什么突然停止接收? 我注意到,在打开双引号(即content =“或username =”)后,数据通常会突然停止。 如果它总是以这种方式发生,不确定100%。 无论如何,这可能是一个编码问题吗? 任何其他想法?

任何帮助,将不胜感激。


您可以尝试添加一些调试。

添加这些选项:

curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR,$f = fopen(__DIR__ . "/error.log", "w+"));

而这些curl_close()之前:

if($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):n {$error_message}";
}

如果这不起作用,请尝试增加超时时间并查看它是否消失:

curl_setopt($ch, CURLOPT_TIMEOUT, 300); 

如果超时增加工作,然后找出原因。

链接地址: http://www.djcxy.com/p/69693.html

上一篇: PHP CURL Retrieves Partial pages

下一篇: URL parser error : Entity 'nbsp' not defined