|
|
|
| Всем доброго дня.
Пожалуйста, подскажите, в чем может быть причина.
Запрашиваю контент страницы, но cURL срабатывает через раз
require_once("phpQuery.php");
$url = "http://www.booking.com/searchresults.ru.html?redirect_aa=0&city=-2612321;offset=0;rows=50;";
function get_data($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)");
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$pq = phpQuery::newDocument(get_data($url));
$htr = $pq->find('table.hotellist');
echo $htr;
|
| |
|
|
|
|
|
|
|
для: ZeeG
(23.03.2012 в 11:23)
| | установите CURLOPT_HEADER в true и посмотрите что возвращает сервер в заголовках, когда "не срабатывает". Возможно ограничение по частоте обращения стоит на сервере. | |
|
|
|
|
|
|
|
для: Sfinks
(23.03.2012 в 11:29)
| | спасибо, но все равно что-то не так | |
|
|
|
|
|
|
|
для: ZeeG
(23.03.2012 в 12:17)
| | Давно писал маленького бота, для игрушки одной, часто ошибки выскакивали, я решил проблему примерно так (в функции Exec ()):
class cURL
{
protected $Errors = 0;
protected $Resource = NULL;
protected $Options = array (
CURLOPT_AUTOREFERER => True, // Автоматически устанавливать Referer
CURLOPT_FOLLOWLOCATION => True, // Следовать заголовкам Location
CURLOPT_HEADER => False, // Включить заголовки в вывод
CURLOPT_RETURNTRANSFER => True, // Возврат результата в качестве строки
CURLOPT_CONNECTTIMEOUT => 10, // Время ожидания попытки соединения
CURLOPT_POSTFIELDS => NULL, // Данные POST для передачи
CURLOPT_USERAGENT => NULL, // содержимое заголовка User-agent
CURLOPT_URL => NULL, // Загружаемый адрес
);
public function __construct ($Url, $UserAgent)
{
$this->Options[CURLOPT_URL] = $Url;
$this->Options[CURLOPT_USERAGENT] = $UserAgent;
$this->Resource = curl_init ();
curl_setopt_array ($this->Resource, $this->Options);
}
......
public function Exec ()
{
$Result = curl_exec ($this->Resource);
if (curl_getinfo ($this->Resource, CURLINFO_HTTP_CODE) >= 400)
{
$this->Errors++;
if ($this->Errors >= 10)
{
exit ('Prevyshenie maksimalno dopustimogo kolichestva oshibok!');
}
sleep (1);
return $Result = $this->Exec ();
}
$this->Errors = 0;
file_put_contents ('deb.txt', '====================================================================================='.PHP_EOL.$Result.PHP_EOL); #, FILE_APPEND);
return $Result;
}
}
|
Извиняюсь за отсутствие комментариев. в общем проверю что статус ответа не больше 400, если больше ставил паузу в 1 сек и пробовал обратиться еще раз, если тоже самое произошло 10 раз подряд, срипт оваливался | |
|
|
|
|
|
|
|
для: MHz
(23.03.2012 в 12:26)
| | Извините, а как вызвать работу данного класса? я с классами не умею работать еще.
PS
Заголовки ответа
HTTP/1.1 200 OK
Date: Fri, 23 Mar 2012 08:26:16 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: max-age=0
Expires: Fri, 23 Mar 2012 08:26:16 GMT
Content-Length: 0
|
| |
|
|
|
|
|
|
|
для: ZeeG
(23.03.2012 в 12:29)
| | ну я просто привел часть класса чтобы понять какие параметры у меня в curl и как работает у меня функция exec (); | |
|
|
|
|
|
|
|
для: ZeeG
(23.03.2012 в 12:29)
| | Именно при этих заголовках проблемы возникают? Может проблема в контенте? Или может сервер неправильные заголовки отдает в случае ошибок. | |
|
|
|
|
|
|
|
для: MHz
(23.03.2012 в 12:46)
| | А что обычно делают в таких случаях?
Можно что-то сделать?
Я не пойму в чем дело.... то работает, то нет... если не сработало, жму F5, иногда несколько раз, до срабатывания. еще недавно всё было нормально .. | |
|
|
|
|
|
|
|
для: ZeeG
(23.03.2012 в 13:35)
| | Для начала необходимо выяснить в чем проблема, для этого нужно вести какой-нибудь журнал в котором хранить состояние переменных в момент когда скрипт не срабатывает. | |
|
|
|