Я использовал 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 … ничего.
Я также попробовал фиксированный пользовательский агент для cURL, а также случайные пользовательские агенты .. ничего …
Единственный раз, когда это работает (время от времени, не всегда), это если я делаю простой var_dump ($ prdhtml); строки в результате на странице, и я не понимаю, как это отличается от ob_start.
Я не понимаю, в чем проблема и как ее исправить …
РЕДАКТИРОВАТЬ:
Пример кода и скрипка:
http://codepad.viper-7.com/aePjg7
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); //
Других решений пока нет …