Пример POST запроса через WebRequest / Язык программирования C# / КБ СОФТ СТУДИЯ

POST-запросы. Метод post

Последнее обновление: 1.11.2015

В отличие от GET-запросов данные POST-запросов передаются не в строке запроса, а в его теле.

Распространенным примеров подобных запросов является отправка данных формы на сервер.

Для отправки POST-запросов предназначен метод . Его объявление и использование в целом аналогично методу get.

Он принимает следующие параметры:

  • : обязательный параметр, содержащий адрес ресурса, к которому будет обращаться запрос

  • : необязательный параметр, содержащий простой объект javascript или строку, которые будут отправлены на сервер вместе с запросом

  • : необязательный параметр — функция обратного вызова, которая будет выполняться при успешном выполнении запроса. Она может принимать три параметра: — данные, полученные с сервера, — — статус запроса и — специальный объект jQuery, который представляет расширенный вариант объекта XMLHttpRequest.

  • : необязательный параметр, содержащий тип данных в виде строки, например, «xml» или «json»

На выходе метод post возвращает объект .

Пример использования:

$.post(‘ajax.php’, {‘login’:’1111′, ‘password’ : ‘2222’}, function(data) { $(‘#news’).html(data); });

В данном случае мы передаем в качестве данных пароль и логин. На сервере мы можем получить данные и отправить ответ пользователю:

<?php $login=$_POST[‘login’]; $pass=$_POST[‘password’]; if($login==»1111″ && $pass==»2222″){ echo «Авторизация прошла успешно»; } else{ echo «Неверно введен логин или пароль»; } ?>

Поскольку наиболее часто запрос post используется при отправке данных формы, используем на стороне клиента форму:

<html> <head> <meta charset=’utf-8′> <script src=»https://rpilot62.ru/wp-content/uploads/2018/06/60599.jpg»></script> </head> <body> <form action=»ajax.php» id=»loginForm»> <input type=»text» id=»login» placeholder=»Логин» /><br><br> <input type=»text» id=»password» placeholder=»Пароль» /><br><br> <input type=»submit» value=»Войти» /> </form> <div id=»result»></div> <script type=»text/javascript»> $(«#loginForm»).submit(function(event) { // Предотвращаем обычную отправку формы event.preventDefault(); $.post(‘ajax.php’, {‘login’:$(‘#login’).val(), ‘password’ : $(‘#password’).val()}, function(data) { $(‘#result’).html(data); }); }); </script> </body> </html>

Итак, серверная часть, к которой будет обращаться форма — файл ajax.php — у нас остается той же. Только в данном случае теперь для параметра в методе post мы данные берем из полей на этой форме.

Обратите внимание, что мы блокируем обычную отправку формы (), иначе у нас бы шла переадресация.

Сериализация формы

Посколкьу нередко формы не ограничиваются двумя полями, то проще применять сериализацию формы. Сериализация производится посредством метода и в качестве результата создает объект javascript, где свойствам соответствуют поля формы. И значения хранят эти свойства те же, что имеют соответственные поля формы.

Итак, применим сеиализацию формы:

<form action=»ajax.php» id=»loginForm»> <input type=»text» name=»login» placeholder=»Логин» /><br><br> <input type=»text» name=»password» placeholder=»Пароль» /><br><br> <input type=»submit» value=»Войти» /> </form> <div id=»result»></div> <script type=»text/javascript»> $(«#loginForm»).submit(function(event) { // Предотвращаем обычную отправку формы event.preventDefault(); $.post(‘ajax.php’, $(«#loginForm»).serialize(), function(data) { $(‘#result’).html(data); }); }); </script>

В отличие от предыдущего примера у нас здесь два отличия. Во-первых, обратите внимание, что поля для ввода имеют атрибут . При указании параметра мы производим сериализацию данных формы через метод : . В данном методе в тело запроса передаются параметры. Причем имена параметров — это значения атрибутов name полей ввода. А значения параметров — соответственно введенные значения в текстовые поля.

И поэтому с помощью php мы можем извлечь эти значения: .

НазадСодержаниеВперед

Кроме метода GET, который мы рассмотрели в предыдущей заметке, существует еще один метод отправки запроса по протоколу HTTP – метод POST. Метод POST тоже очень часто используется на практике.

Если, для того, чтобы обратиться к серверу методом GET, нам достаточно было набрать запрос в URL-адрес, то в методе POST все работает по другому принципу.

Для того, чтобы выполнить этот вид запроса, нам необходимо нажать на кнопку с атрибутом type=»submit», которая расположена на веб-странице. Обратите внимание, что эта кнопка расположена в элементе <form>, у которого установлен атрибут method со значением post.

Рассмотрим этот HTML-код:

<form name=»form1″ method=»post» action=»post.php»> Введите текст:<br /> <textarea name=»text» cols=»80″ rows=»10″></textarea> <input name=»» type=»submit» value=»Отправить»/> </form>

Если пользователь введет в текстовое поле какой-либо текст и нажмет на кнопку «Отправить», то на сервер будет отправлена переменная text со значением того содержимого, которое ввел пользователь.

Эта переменная будет отправлена методом POST.

Если в форме написать так:

<form name=»form1″ method=»get» action=»post.php»>

То данные будут отправляться методом GET.

Если, в случае с GET-запросом, объем данных, которые мы могли передать ограничивался длиной адресной строки браузера, то в случае с запросом POST, такого ограничения нет, и мы можем передавать значительные объемы информации.

Еще одно отличие метода POST от GET, метод POST скрывает все передаваемые им переменные и их значения, в своём теле (Entity-Body). В случае с методом GET они хранились в строке запроса (Request-URI).

Вот пример запроса, выполненного методом POST:

POST / HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 35\r\n
\r\n
login=Dima&password=12345

Таким образом, передавая данные методом POST, их будет намного труднее перехватить злоумышленнику, т.к.

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

Кроме того, методом POST можно передавать не только текст, но и мультимедиа данные (картинки, аудио, видео). Существует специальный параметр Content-Type, который определяет тот вид информации, который необходимо передать.

Ну и, наконец, чтобы на сервере получить данные, которые были переданы этим методом, используется переменная POST.

Вот пример обработки на языке PHP:

<?php
echo $_POST[‘text’];
?>

Кстати, хотите узнать есть ли смысл в каком-то элементе на вашем сайте с помощью «целей» Яндекс Метрики и Google Analytics?

Уберите то, что НЕ работает, добавьте то, что работает и удвойте вашу выручку.

Курс по настройке целей Яндекс Метрики..

Курс по настройке целей Google Analytics..

Форум: «Начинающим»;
Поиск по всему сайту: www.delphimaster.net;
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];

Вниз

Каков формат POST запроса? 

vegarulez ©   (2007-11-01 18:00) [0]

доброго времени суток мастерам!

У меня вопрос такого характера, есть демка (c:\Program Files\Borland\Delphi6\Demos\Indy\HTTPClient\)
так вот там есть поле для ввода POST аргументов.

Вопрос как правильно вбить туда переменные?

[У меня допустим используются несколько переменных: choose,Naz, Cena, kol и т.п.

(внизу приведу пример пхп скрипта там можно увидеть остальные)]

чтобы при обращении этой демки к файлу find.php — файл find.php выводил в демку html код таблички с найдёнными элементами, т.е. уже с теми данными которые, выбрались из БД, как будто бы переменные [choose,Naz, Cena, kol и т.п. ] были получены из браузера с помощью POST`а.

Ещё раз повторю вопрос:
Вопрос как правильно в поле POST`a, в демке вбить переменные, и их значения?

пример php скрипта :


Palladin ©   (2007-11-01 18:46) [1]

<TIdHTTP>.ContentType:="application/x-www-form-urlencoded";

сделал?


vegarulez ©   (2007-11-01 18:49) [2]

неа не сделал ещё…
так я же не про контент тайп спрашиваю…
Там в демке есть поле: Post information, я так понимаю туда нужно пост параметры помещать… Но в каком формате я не знаю 🙁


Palladin ©   (2007-11-01 18:59) [3]

да самым обычным

a=b&c=d
и тд и тп


vegarulez ©   (2007-11-01 19:06) [4]

чот поробовал не получается 🙁
Сможешь в аську стукнуть?
250921382


Palladin ©   (2007-11-01 19:09) [5]

ну например

Var
l:TStringList;
r:String;
Begin
l:=TStringList.Create;
Try
 l.Text:="a=b&c=d";
 <TIdHTTP>.ContentType:="application/x-www-form-urlencoded";
 r:=<TIdHTTP>.Post(<Url>,l);
Finally
 l.Free;
End;
End


vegarulez ©   (2007-11-01 19:27) [6]

а… всё понял свою ошибку кажись…
дело в скрипте find.php


vegarulez ©   (2007-11-01 19:33) [7]

Спасибо большое!


vegarulez ©   (2007-11-01 20:16) [8]

Млин ерунда какая-то… в проге всё номано работает тепрь, а в браузере не хотит номано пахать… ничего не понимаю…


vegarulez ©   (2007-11-01 20:22) [9]

в браузере строка http://localhost/lab4/find.php?choose=4&Cena=100
не хотит выводить то что надо … ничего не понимаю…
уже переделал скрипт поправил косяки и прога номано заработала, а вот браузер тупит… [или я туплю (нужное подчеркнуть) ]


vegarulez ©   (2007-11-01 20:23) [10]

Подскажите где тут собака порылась???…


vegarulez ©   (2007-11-01 21:19) [11]

Всё. Всем спасибо. Разобрался. (передаю строку в формате GET а пытаюсь разобрать POST`ом).
Тока странно почему всё же делфя тогда передаёт в формате GET`a данные для POST`а   и они успешно разбираются скриптом…
Кто нить может на этот вопрос ответить?
(З.ы. Браузер, как мы видим выше не смог :)) )


Форум: «Начинающим»;
Поиск по всему сайту: www.delphimaster.net;
Текущий архив: 2007.11.25;
Скачать: [xml.tar.bz2];

Наверх

Память: 0.76 MB
Время: 0.08 c

Создание POST/ GET запросов с помощью PHP

Создание POST-запросов с помощью PHP

Первый метод для выполнения PHP POST запроса заключается в использовании file_get_contents. Второй метод будет использовать fread в сочетании с парой других функций. Оба варианта применяют функцию stream_context_create, чтобы заполнить необходимые поля заголовка запроса.

Пояснение кода

Переменная $sPD содержит данные, которые нужно передать. Она должна иметь формат строки HTTP-запроса, поэтому некоторые специальные символы должны быть закодированы.

И в функции file_get_contents, и в функции fread у нас есть два новых параметра. Первый из них — use_include_path.

Так как мы выполняем HTTP- запрос, в обоих примерах он будет иметь значение false. При использовании значения true для считывания локального ресурса функция будет искать файл по адресу include_path.

Второй параметр — context, он заполняется возвращаемым значением stream_context_create, который принимает значение массива $aHTTP.

Использование file_get_contents для выполнения POST-запросов

Чтобы в PHP отправить POST запрос с помощью file_get_contents, нужно применить stream_context_create, чтобы вручную заполнить поля заголовка и указать, какая «обертка» будет использоваться — в данном случае HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array( ‘http’ => // Обертка, которая будет использоваться array( ‘method’ => ‘POST’, // Метод запроса // Ниже задаются заголовки запроса ‘header’ => ‘Content-type: application/x-www-form-urlencoded’, ‘content’ => $sPD ) ); $context = stream_context_create($aHTTP); $contents = file_get_contents($sURL, false, $context); echo $contents;

Использование fread для выполнения POST-запросов

Для выполнения POST-запросов можно использовать функцию fread. В следующем примере stream_context_create используется для составления необходимых заголовков HTTP-запроса:

$sURL = "http://brugbart.com/Examples/http-post.php"; // URL-адрес POST $sPD = "name=Jacob&bench=150"; // Данные POST $aHTTP = array( ‘http’ => // Обертка, которая будет использоваться array( ‘method’ => ‘POST’, // Request Method // Ниже задаются заголовки запроса ‘header’ => ‘Content-type: application/x-www-form-urlencoded’, ‘content’ => $sPD ) ); $context = stream_context_create($aHTTP); $handle = fopen($sURL, ‘r’, false, $context); $contents = »; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); echo $contents;

Выполнение GET-запросов с помощью PHP

Теперь мы уделим внимание использованию fread и file_get_contents для загрузки контента из интернета через HTTP и HTTPS. Чтобы использовать методы, описанные в этой статье, необходимо активировать опцию fopen wrappers. Для этого в файле php.ini нужно установить для параметра allow_url_fopen значение On.

Выполнение POST и GET запросов PHP применяется для входа в систему на сайтах, получения содержимого веб-страницы или проверки новых версий приложений. Мы расскажем, как выполнять простые HTTP-запросы.

Использование fread для загрузки или получения файлов через интернет

Помните, что считывание веб-страницы ограничивается доступной частью пакета. Так что нужно использовать функцию stream_get_contents (аналогичную file_get_contents) или цикл while, чтобы считывать содержимое меньшими фрагментами до тех пор, пока не будет достигнут конец файла:

<?php $handle = fopen("http://brugbart.com/", "rb"); $contents = stream_get_contents($handle); fclose($handle); ?> <?php $handle = fopen("http://brugbart.com/", "rb"); $contents = »; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); echo $contents; ?>

В данном случае обработки POST запроса PHP последний аргумент функции fread равен размеру фрагмента. Он, как правило, не должен быть больше, чем 8192 (8*1024).

Имейте в виду, что он может быть больше или меньше, а также может быть ограничен настройками системы, на которой запускается PHP.

Использование file_get_contents для получения URL-адреса сайта

Еще проще использовать этот метод при считывании файла по HTTP, так как вам не придется заботиться о считывании по фрагментам — все обрабатывается в PHP.

<?php $homepage = file_get_contents(‘http://brugbart.com/’); echo $homepage; ?>

Перевод статьи «Making POST Requests With PHP» был подготовлен дружной командой проекта Сайтостроение от А до Я.

Php curl post пример запроса

← разместить еще код

Пример curl для выполнения post запроса с указанием headers, content-type и параметров. Параметр curl_setopt позволяет указать необходимые параметры запроса.

Параметры передаются в виде get-параметров. Чтобы, например, отправить json данные, указываем Content-Type: application/json.

Расшаренный код:

<? $url = "http://site.ru"; $page = "/api/v2/oauth2/token.json"; $header = "POST ".$page." HTTP/1.1 \r\n"; $header .= "Content-Type: application/x-www-form-urlencoded \r\n"; $header .= "Host: site.ru \r\n"; // $header .= "Content-length: ".strlen($post_string)." \r\n"; // $header .= "Content-transfer-encoding: text \r\n"; // $header .= "Content-Length: 35\r\n"; // $header .= "grant_type=refresh_token&client_id=UEB43MamKujmH&client_secret=YOncQJZdRqYts5hoBzcGSHuFYdMdergDDnxCXok65PIiz3uTtlfpXFYLun8Gf9nA6j25S7Ah8cxoeSTFuzaCpY43LyrE6aQY4C3qaUYvWtpCbo5GjEKis5jXhco04YD8Rdqcb3i95kUH6YUYPjSs9WT2BEwBSoFkMdH7eR83DQYHyLdeH0LqllDvjP8akJlevFqAeal"; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE); curl_setopt($ch,CURLOPT_MAXREDIRS,10); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials&client_id=UEBQHZPhMamKurecQJZdRqYts5hoBzcGSHuFYdMdernxCXok65PIiz3uTtlfpXFYLun8Gf9nA6j25S7Ah8cxoeSTFuzaCpY43LyiNbFuN1ZuQQqJE6aQY4C3qaUYvWtpCbo5GjEKis5jXhco04YD8Rdqcb3i95kUH6YUYPjSs9WT2BEwBSoFkMdH7eR83DQYHyLdeH0LqllDvjP8akJlevFqAeal"); $data = curl_exec($ch); echo $data;

Добавить комментарий

Закрыть меню