PHP cUrl返回没有var_dump的空字符串

时间:2015-01-18 15:42:58

标签: php curl screen-scraping var-dump

我正在使用cUrl来降低某些产品的价格。所有这些都运作良好,几个月,直到现在。

现在在cURL之后,我得到一个空的结果..显然......因为如果我对返回的变量执行var_dump,它就可以工作......我不明白var怎么可能是空的,直到我打印它?!

这是我的完整cURL功能:

function linkcurl($targetURL){

$linkcurl = curl_init();

curl_setopt($linkcurl, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookie.tmpz");
curl_setopt($linkcurl, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookie.tmpz");
curl_setopt($linkcurl, CURLOPT_VERBOSE, true);
//curl_setopt($linkcurl, CURLOPT_USERAGENT, random_user_agent());
curl_setopt($linkcurl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($linkcurl, CURLOPT_RETURNTRANSFER, TRUE);   

curl_setopt($linkcurl, CURLOPT_AUTOREFERER, TRUE);

curl_setopt($linkcurl, CURLOPT_HEADER, 0); // debug headers sent - 1
curl_setopt($linkcurl, CURLOPT_URL, $targetURL);

$datax = curl_exec ($linkcurl);

curl_close($linkcurl);

return $datax;
}

$prdhtml = linkcurl($product_page_url); //

不,我确实尝试向我的cURL添加更多选项但是没有改变一件事:

curl_setopt($linkcurl, CURLOPT_VERBOSE, true);
curl_setopt($linkcurl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($linkcurl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($linkcurl, CURLOPT_AUTOREFERER, TRUE);

同样的结果,没有任何改变。

我确实尝试将var_dump ob_start添加到我的curl函数中,如下所示:

ob_start();
return curl_exec ($ch);
ob_end_clean();

仍然没有。

我还尝试在函数之外捕获cURL输出,如下所示:

ob_start();
var_dump($prdhtml);
$prdhtml = ob_get_clean();

仍然......没有改变......我也尝试过使用print_r和var_export的varionts ......没有。

我也尝试过针对cURL的固定用户代理以及随机用户代理......没有......

它唯一有效的时间(不时,并非总是)是我做一个简单的var_dump($ prdhtml);在页面上作为结果的字符串,我不知道它与ob_start有什么不同。

我不明白问题是什么以及如何解决它......

编辑:

示例代码和小提琴: http://codepad.viper-7.com/aePjg7

1 个答案:

答案 0 :(得分:0)

function linkcurl($targetURL){

$linkcurl = curl_init();

curl_setopt($linkcurl, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookie.tmpz");
curl_setopt($linkcurl, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookie.tmpz");
curl_setopt($linkcurl, CURLOPT_RETURNTRANSFER, TRUE);   
curl_setopt($linkcurl, CURLOPT_CUSTOMREQUEST, 'GET');   
curl_setopt($linkcurl, CURLOPT_URL, $targetURL);

$datax = curl_exec ($linkcurl);
 if ($datax) {
curl_close($linkcurl);

return $datax;
} else {
return curl_error ( $linkcurl );
}
}

$prdhtml = linkcurl($product_page_url); //