Тайм-аут передачи данных с сервера CURL - PullRequest
0 голосов
/ 22 февраля 2012

Я использую следующий код для получения формы данных xml icecat.biz:

set_time_limit (0);
$login = "Arpan";
$password = "arpan";
//$url="http://data.icecat.biz/export/freexml.int/EN/files.index.xml";
$url= "http://data.icecat.biz/export/level4/EN";
//$url="http://data.icecat.biz/export/freexml.int/DE/10.xml";

$user_agent = 'Mozilla/5.0 (Windows; U;
Windows NT 5.1; ru; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9';
        $header = array(
        "Accept: text/xml,application/xml,application/xhtml+xml,
text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
        "Accept-Language: ru-ru,ru;q=0.7,en-us;q=0.5,en;q=0.3",
        "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7",
        "Keep-Alive: 300");
$local_path = "myxml.xml";
$file_handle = fopen($local_path, "w");

ob_start();
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_FILE, $file_handle); 
 curl_setopt($ch, CURLOPT_HEADER, 0);
 //curl_setopt ( $ch , CURLOPT_HTTPHEADER, $header );
 curl_setopt($ch, CURLOPT_USERPWD, $login . ":" . $password);
 curl_setopt($ch, CURLOPT_TIMEOUT, 0); // times out after 4s
 //curl_setopt($c, CURLOPT_TIMEOUT, 2);
 //curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body
 //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 //$head = curl_exec($ch);

 $result = curl_exec ($ch);

 if(curl_errno($ch))
{
    echo 'Curl error: ' . curl_error($ch);
}

 curl_close($ch);
 ob_end_clean();
 fclose ($file_handle);



$xmlStr = file_get_contents($local_path);
$xmlObj = simplexml_load_string($xmlStr);



print "<pre>";
//print_r($xmlObj->Product->ProductRelated->attributes()->ID);
print_r($xmlObj);
exit;    

Страница выполняется в течение неограниченного времени, но XML не обновляется через 10–20 секунд. Вывод xml также не завершен. Я думаю, что через некоторое время сервер не отвечает или данные не передаются.

Вот сообщение об ошибке:

**** The server xml (icecat) size is big

В чем проблема и как ее исправить?

1 Ответ

0 голосов
/ 22 февраля 2012

Звучит так, будто вы не даете достаточно времени для загрузки запроса.

Раскомментируйте ваш // curl_setopt ($ c, CURLOPT_TIMEOUT, 2);

И установите время ожидания 600 для теста.

Помимо того, что ваш запрос выглядит нормально, вымог всегда проверять, кэширует ли сервер ответы, последнее, что я видел в последнее время, это наличие у моих пользователей обратных прокси-серверов для кэширования их обычных операций.Где некоторые усеченные ответы были кэшированы, и это все, что они получили за 24 часа, хотя это может быть не связано с вами.

...