блудный сын Ухоха, заголовки отправляются И для метода пост, И для метода гет. Теперь перечитай свой вопрос )))
Спасибо! Кажись немного прояснилось. Но все равно мне непонятно, как так получается у сервера разделить данные на заголовки браузера и на сами ПОСТ данные? Вот смотрите, заголовки браузера идут в переменные $_SERVER, например: Код (Text): _SERVER["HTTP_USER_AGENT"] Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3 _SERVER["HTTP_ACCEPT"] text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 _SERVER["HTTP_ACCEPT_LANGUAGE"] ru,en-us;q=0.7,en;q=0.3 _SERVER["HTTP_ACCEPT_ENCODING"] gzip,deflate _SERVER["HTTP_ACCEPT_CHARSET"] windows-1251,utf-8;q=0.7,*;q=0.7 _SERVER["HTTP_KEEP_ALIVE"] 300 _SERVER["HTTP_CONNECTION"] keep-alive а ПОСТ данные идут в переменные $_POST: Код (Text): _POST["name"]3453454 _POST["pass"]***** _POST["send"]Отправить Почему заголовки браузера передаваемые методом ПОСТ не идут в переменные $_POST? И наоборот, почему для данных ПОСТ на серверe не фигурируют переменные $_SERVER?
вот я смотрю на тему во фрилансе про залогинивание. Читаю эту тему. И вопрос: а зачем это вообще нужно? Может поставить какой-нить ALL robo form иль какой-нить менеджер паролей?
блудный сын Потому, что это разные вещи. Заголовки формирует агент (браузер либо сервер, смотря куда идут данные), остальное формирует пользователь (либо приложение на сервере). Первая часть является служебной, и предназначена в основном для нужд веб-сервера либо браузера. Вторая - для нужд самого веб-приложения. Конечно, эти нужды нередко пересекаются, например в заголовках указывается кодировка содержания, но все же это понятия разного уровня. А чисто технически, как их ухитряются разделять при анализе запроса-ответа - ты будешь смеяться, но очень просто. Содержимое идет после заголовков и отделяется от них пустой строкой. Вот и все
блудный сын Браузер их просто передает Понимаешь, это как астральные суперзагловоки, которые кастово-иерархически выше POST и GET на два переноса строки. Поэтому маг PHP помещает их в колбу высшего существа, к которому может обращаться браузер - $_SERVER.
Надо. Эти твои слова действительно все бы объяснили! Но вот мой код и в нем ПОСТ данные от заголовков пустой строкой не отделены, однако Имя и Пароль фигурируют на сервере в переменных $_POST , а заголовки браузера в переменных $_SERVER. Как так сервер угадал, что и куда раскидывать по переменным если нет пустой строки? PHP: <?php $hostname="test"; $path="/index.php"; $line=""; //Устанавливаем соединение имя которого передано //в параметре $hostname $fp=fsockopen($hostname,80,$errno,$errstr); //проверяем успешность установки соединения if (!$fp) echo "$errstr($errno)<br />\n"; else { //HTTP POST данные запроса $data="name=".urlencode("Имя")."&pass=".urlencode("Пароль")."\r\n\r\n"; //заголовок HTTP - запроса $headers="POST $path HTTP/1.1\r\n"; $headers.="Host: $hostname\r\n"; $headers.='User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9b3) Gecko/2008020514 Firefox/3.0b3\r\n'; $headers.="Accept-Language: ru,en-us;q=0.7,en;q=0.3\r\n"; $headers.="Accept-Encoding: gzip,deflate\r\n"; $headers.="Content-type: application/x-www-form-urlencoded\r\n"; $headers.="Content-Length: ".strlen($data)."\r\n"; $headers .="Connection: Close\r\n\r\n"; //Отправляем HTTP - запрос серверу fwrite($fp,$headers.$data); // Получаем ответ while(!feof($fp)) { $line .=fgets($fp,32); } fclose($fp); } echo $line; ?>
блудный сын Вот два примера реальных заголовков: 1. Перехожу в этот топик (GET- Запрос) 2. Отсылаю этот пост: Отсылать заголовки в PHP можно через fsockopen или через curl
Но извините! Пустая строка ведь идет после ПОСТ данных! А не между заголовками и данными ПОСТ! Как же сервер догадался, что куда?
Ой! Все! Врубился! Тьфу блин! В заголовках ведь только длина данных указывалась, а сами данные пошли после во fwrite($fp,$headers.$data);! Вот невнимательный стал Спасибо Dagdamor!!!
Правда теперь ошибка наверно в том. что при отправке ПОСТ данных в заголовке правильно писать не $headers .="Connection: Close\r\n\r\n"; а что-то другое? Наверное Connection: keep-alive ?
А какой в случае ПОСТ данных Connection: правильно в заголовках слать? Connection: Close\r\n\r\n наверно не подходит. т.к. получается что соединение должно закрыться до отправки самих ПОСТ данных?
А как отправить данные, допустим на google.ru? Например мне нужно вставить в форму поисковика запрос "site:www.moisite.ru" и "нажать" поиск чтоб выдало колличество проиндексированных страниц. Для этого приемлима функция fwrite($fp,$headers.$data); И если да , то как вписать данные и сделать так, чтоб они попали в форму?
На google.ru данные о поиске передаються методом Get. Зайдите туда, введите запрос, нажмите искать и обратите внимание на адресную строку браузера.