Выборочный 400 Bad Request

Winner

Новичок
Выборочный 400 Bad Request

Здравствуйте Уважаемые. На указанный ниже запрос некоторые сервера выдают 400 ошибку:

$req ="GET / HTTP/1.1\r\n";
$req .="Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\r\n";
$req .="Accept-Language: ru,en-us;q=0.5\r\n";
$req .="Accept-Encoding: deflate\r\n";
$req .="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n";
$req .="Content-Type: application/x-www-form-urlencoded\r\n";
$req .="Host: site.ru:80\r\n";
$req .="Connection: keep-alive\r\n";
$req .= "Cookie: ".$givCook."\r\n";
$req .="Cache-Control: no-cache\r\n";
$req .="\r\n";

В ответ серверные ругательства:

HTTP/1.1 400 Bad Request
Date: Wed, 10 Aug 2005 10:22:36 GMT
Server: Apache/1.3.33 (Unix) mod_fastcgi/2.4.0 FrontPage/5.0.2.2623 PHP/4.3.10 mod_gzip/1.3.19.1a mod_ssl/2.8.22 OpenSSL/0.9.7b rus/PL30.20
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

Пожалуйста подскажите где ошибка и как должно быть правильно.
 

kruglov

Новичок
Берете сервер, который выдает 400, и начинаете эксперименты по нахождению проблемной строчки путем убирания их по одной (разве кроме первой и последней).

p. s. хотя вижу, что Host: site.ru:80 содержит :80 напрасно.
 

Winner

Новичок
kruglov спасибо за помощь. Не пойму, что этому серверу надо. После отправки строки запроса скрипт зависает. Без строки запроса все нормально.

PHP:
$metod = 'GET'; $host = '1-2.ru'; $port=80; 
$path = '/links/index.shtml';
$query = "category=6";

$req = $metod." ".$path." HTTP/1.1\r\n";
$req .= "Content-Length: ".strlen($query)."\r\n";
$req .= "Host: ".$host.":".$port."\r\n";
$req .= "\r\n".$query;

$soc = fsockopen($host, $port, $errno, $errstr, 120);
socket_set_blocking($soc, FALSE);

if(!$soc)
	{echo "($errno) $errstr";
	exit;
	}

fwrite($soc, $req);

while(!feof($soc))
	{$page .= fgets($soc);
	}

fclose($soc);

echo error_reporting(E_ALL);
echo $page;
Люди добрые помогите.
 

kruglov

Новичок
Winner
Он не зависает, он ждет двойного перевода строки, а его все нету, все нету...

Что такое $req .= "\r\n".$query; ? Это явный 400.

Прям $req = $metod." ".$path."?".$query." HTTP/1.1\r\n"; и шлите.
 
Сверху