Bad Request
Your browser sent a request that this server could not understand.
client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23): /
Сокеты
Код:
::
$it=true;
while($it)
{
$link_to_top10 = $yandex->get('/page.php?text=параметр');
// условие при котором $it=false;
}
$it=true;
while($it)
{
$link_to_top10 = $yandex->get('/page.php?text=параметр');
// условие при котором $it=false;
}
Вот она сама:
Код:
function get($query)
{
$result = '';
$server_ip = 'www.yandex.ru';
$server_port = '80';
$host = 'www.yandex.ru';
$s = fsockopen($server_ip, $server_port);
fputs ($s, "GET $query HTTP/1.0 \n");
fputs ($s, "Connection: Keep-Alive \n");
fputs ($s, "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) \n");
fputs ($s, "Host: $host\n");
fputs ($s, "Accept: */*\n");
fputs ($s, "Accept-Language: en \n");
fputs ($s, "Referer: http://yandex.ru\n");
fputs ($s, "Content-type: * \n");
fputs ($s, "Pragma: no-cache\n");
fputs ($s, "Cache-Control: no-cache\n");
fputs ($s, "Connection: close\n\n");
while (!feof($s)) $result .= fgets($s, 1000000);
if(strpos("TTP/1.1 404 Not FoundDate:",$result)) $result=false;
return $result;
fclose($s);
unset($result);
unset($s);
}
{
$result = '';
$server_ip = 'www.yandex.ru';
$server_port = '80';
$host = 'www.yandex.ru';
$s = fsockopen($server_ip, $server_port);
fputs ($s, "GET $query HTTP/1.0 \n");
fputs ($s, "Connection: Keep-Alive \n");
fputs ($s, "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) \n");
fputs ($s, "Host: $host\n");
fputs ($s, "Accept: */*\n");
fputs ($s, "Accept-Language: en \n");
fputs ($s, "Referer: http://yandex.ru\n");
fputs ($s, "Content-type: * \n");
fputs ($s, "Pragma: no-cache\n");
fputs ($s, "Cache-Control: no-cache\n");
fputs ($s, "Connection: close\n\n");
while (!feof($s)) $result .= fgets($s, 1000000);
if(strpos("TTP/1.1 404 Not FoundDate:",$result)) $result=false;
return $result;
fclose($s);
unset($result);
unset($s);
}
Мы к одной и той же странице в "Яндексе-результаты поиска" делаем несколько запросов, меняя параметр, при этом выводиться по 50 сайтов на страницу. Проблема в том, что скрипт делает 3 запроса и прекращает свою работу. Самое интересное, что если поставить по 10 сайтов на страницу то скрипт делает 10 запросов и умирает.
Данные возвращаються целыми, тоесть не обрывками. Пробовал после каждого запроса тормозить скрипт - sleep(10); - непомогло
Никаких ограничений в самом скрипте нет, тоесть по идеи он должен пролистать 10 страниц, но больше 3 страниц смотреть не хочет.
В чем может быть дело?
(cURL неподходит в виду его отсутствия на сервере)
Кстати тоже давно сталкивался с подобной проблемой, потом через курл зомутили, мошт кто поможет?
P.S тем не менее вопрос не снимаеться =)). Давайте думать в чем дело.
Намного проще и стабильнее использовать расширение PEAR - Request.php.
Так что, с cURL поможет кто?)
Цитата: Данила
Так что, с cURL поможет кто?)
я помогу ) вот элементарная функция:
Код:
function result($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_INTERFACE, "195.225.176.138");
$buf = curl_exec($ch);
curl_close($ch);
return $buf;
}
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_INTERFACE, "195.225.176.138");
$buf = curl_exec($ch);
curl_close($ch);
return $buf;
}
на входе - URL, на выходе - выдача по URL. что непонятно - спрашивайте.
Код:
Скрипт:
Код:
$header[] = "GET $query HTTP/1.0 \n";
$header[] = "Connection: Keep-Alive \n";
$header[] = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) \n";
$header[] = "Host: www.yandex.ru \n";
$header[] = "Referer: http://yandex.ru \n";
$header[] = "Accept: text/html\n";
$header[] = "Cache-Control: no-cache\n";
$header[] = "Connection: close \n\n";
$url = "http://yandex.ru";
$ch = curl_init($url);
//curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch); // run the whole process
curl_close($ch);
return $result;
$header[] = "Connection: Keep-Alive \n";
$header[] = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) \n";
$header[] = "Host: www.yandex.ru \n";
$header[] = "Referer: http://yandex.ru \n";
$header[] = "Accept: text/html\n";
$header[] = "Cache-Control: no-cache\n";
$header[] = "Connection: close \n\n";
$url = "http://yandex.ru";
$ch = curl_init($url);
//curl_setopt($ch, CURLOPT_URL,$url); // set url to post to
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch); // run the whole process
curl_close($ch);
return $result;
Где может быть ошибка?
попробуй
Код:
$header[] = "Connection: Keep-Alive \n";
$header[] = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) \n";
$header[] = "Host: www.yandex.ru \n";
$header[] = "Referer: http://yandex.ru \n";
$header[] = "Accept: text/html\n";
$header[] = "Cache-Control: no-cache\n";
$header[] = "Connection: close \n\n";
$url = "http://yandex.ru";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url."/".$query); // set url to post to
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch); // run the whole process
curl_close($ch);
$header[] = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) \n";
$header[] = "Host: www.yandex.ru \n";
$header[] = "Referer: http://yandex.ru \n";
$header[] = "Accept: text/html\n";
$header[] = "Cache-Control: no-cache\n";
$header[] = "Connection: close \n\n";
$url = "http://yandex.ru";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url."/".$query); // set url to post to
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$result = curl_exec($ch); // run the whole process
curl_close($ch);
а лучше вообще все хедеры забей через CURLOPT соответствующие...