|
|
|
| Если одновременно передаются GET и POST данные, какие хидеры будет отправлять клиент? Ответьте, если можно, с указанием на страницу RFC. | |
|
|
|
|
|
|
|
для: udpn
(02.01.2009 в 14:55)
| | Данные POST передаются в теле POST-запроса.
Данные GET передаются заголовке (более точно - в URI) запроса . Любого.
Собственно, это никакие не данные GET, а всего лишь параметры URI. Просто на старте php они складываются в массив $_GET независимо от типа запроса.
RFC как обычно 2616 . Только что именно Вы хотите в нем найти? | |
|
|
|
|
|
|
|
для: Trianon
(02.01.2009 в 15:05)
| |
POST /index.php?abc=123 HTTP/1.1\r\n
Host: test.ru\r\n
|
Я ваc правильно понял? | |
|
|
|
|
|
|
|
для: udpn
(02.01.2009 в 15:12)
| | Мда, как всегда найти удается сразу после вопроса на форуме =)
Нашел пример на http://webi.ru/webi_articles/6_7_f.html, пишу для тех, кто ищет по форуму.
<?
$url = "http://test.ru/patch/file.php?var=23&var2=54"; // это адрес, по которому скрипт передаст данные методом POST. Как видно, здесь указаны переменные, которые будут переданы через GET
$parse_url = parse_url($url); // при помощи этой функции разбиваем адрес на массив, который будет содержать хост, путь и список переменных.
$path = $parse_url["path"]; // путь до файла(/patch/file.php)
if($parse_url["query"]) // если есть список параметров
$path .= "?" . $parse_url["query"]; // добавляем к пути до файла список переменных(?var=23&var2=54)
$host= $parse_url["host"]; // тут получаем хост (test.ru)
$data = "var3=test&var4=".urlencode("еще тест"); // а вот тут создаем список переменных с параметрами. Эти данные будут переданы через POST. Все значения переменных обязательно нужно кодировать urlencode ("еще тест")
$fp = fsockopen($host, 80, $errno, $errstr, 10);
if ($fp)
{
$out = "POST ".$path." HTTP/1.1\n";
$out .= "Host: ".$host."\n";
$out .= "Referer: ".$url."/\n";
$out .= "User-Agent: Operan";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($data)."\n\n";
$out .= $data."\n\n";
fputs($fp, $out); // отправляем данные
// после отправки данных можно получить ответ сервера и прочитать информацию выданную файлом, в который отправили данные...
// читаем данные построчно и выводим их. Конечно, эти данные можно использовать по своему усмотрению.
while($gets=fgets($fp,2048))
{
print $gets;
}
fclose($fp);
}
?>
|
| |
|
|
|
|
|
|
|
для: udpn
(02.01.2009 в 15:12)
| |
POST /index.php?abc=123 HTTP/1.0
Host: test.ru
Content-Length: 11
с=456&d=789
|
пример, который Вы привели в предыдущем комментарии, содержит ошибки протокола. Довольно грубые. | |
|
|
|
|
|
|
|
для: Trianon
(02.01.2009 в 15:16)
| | А можно подробнее про ошибки протокола? | |
|
|
|
|
|
|
|
для: udpn
(02.01.2009 в 15:40)
| | Коротко.
HTTP/1.1 , если не указано обратное, не закрывает соединение, а ожидает очередной запрос в потоке.
Обратное не указано.
Подробнее - в RFC. | |
|
|
|
|
|
|
|
для: Trianon
(02.01.2009 в 15:45)
| | Вы об этом =) Я исправил и даже не заметил. Там еще и неверные окончания строк установлены. | |
|
|
|
|
|
|
|
для: udpn
(02.01.2009 в 14:55)
| | Да точно такие же как при обычных POST и GET-запросах... собственно никакого конфликта тут быть не может, POST-данные идут в теле HTTP-документа, GET-данные в HTTP-заголовках. Поэтому смело можете отправлять данные одновременно методом POST и методом GET - они будут доступны на сервере. | |
|
|
|