• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Post / Get Запросы В Delphi

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,562
Баллы
155


Сегодня максимально подробно поговорим о POST/GET запросах: что это такое, зачем нужно, как работает, где применяется.

Актуальность вопроса.

Почти для любой программы, работающей с сетью internet и протоколом http в частости, как-либо взаимодействующей с сайтами и ресурсами, необходимы запросы. Они используются почти везде: начиная от брутов, заканчивая API сайтов - миллионников, таких как mail, vk, google. В процессе программирования любой новичёк сталкивается с понятием запроса и изучает его. Обычно такое изучение происходит посредственно, вскользь, с девизом "лишь бы работало". А по-моему, это в корне не верно. Ведь что бы с чем-то работать на хорошем уровне, нужно понимать как это работает и представлять, что будут делать те или иные строчки вашего кода. Именно поэтому и написан нижеизложенный материал, главная цель которого - на пальцах показать принцип работы, способы реализации и примеры из практики.

Что это такое?

Все перечисленные ниже виды запросов (а их перечислено всего 2) - это HTTP методы, которые используются в http протоколе для различных нужд. HTTP протокол - протокол, позволяющий работать с сайтами на уровне запросов/ответов.

Все HTTP запросы состоят (или частично состоят) из 3-х частей:

- Строка запроса

- Заголовки запроса - передаются все заголовки (Host, User-Agent и прочее)

- Тело сообщения - указываются все данные, передаваемые на сайт (используется в POST, который будет рассмотрен ниже)

GET.

GET-запрос - это запрос, который при вызове вернёт данные запрошенного ресурса. Какие данные? Обычный html-код сайта. Приведу пример: вам понадобился исходный код какой-либо страницы, например - mail.ru. На форму кидаем компонент idHTTP и memo, а затем, в событии OnCreate у формы пишем следующее:


memo1.Text:= IdHTTP.Get('

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.




Ставим свойство HandleRedirect у компонента IdHTTP на true и запускаем:

Как видим, исходный код страницы успешно получен. Вопросы: "А зачем это нужно" есть? Если есть, то объясняю - очень часто, при работе с каким-либо сайтом, нужно получить определённый данные из его кода, грубо говоря - спарсить, например - ссылку на определённый объект. Вот тут - без GET-запроса обойтись очень сложно.

В качестве параметра у процедуры GET передаётся ссылка на ресурс, исходный код которого нужно получить.

POST.

POST-запросы отличаются от GET тем, что передают что-либо в теле сообщения (как заметили, get никаких данных не передаёт - он лишь их запрашивае).

POST - запрос, передающий что-либо в формы (форма ввода логина, форма ввода пароля) сайта (в данном случае передаём логин и пароль). Именно такие типы запросов применяются чаще всего при авторизации на сайты, при написании гулялок и брутов. Вид запроса в delphi следующий:


http.pos('ссылка на сайт', массив данных);


Что может быть массивом данных? Например, да и чаще всего - объект типа TStringList, или, грубо говоря - обычный массив строк.

Для практики поставим задчу - авторизироваться на сайте pwcode.net. Запускаем сниффер, авторизируемся:



В сниффере находим POST-метод, открываем переданные параметры и видим, что при авторизации сайту передаётся 3 параметра - login_name, login_password, login. Всё тоже можно повторить и программно. Для этого объявляем переменную типа TStringList, кидаем на форму компонент idhttp, 2 edit'а и 1 button.

В событии onclick у компонента Button пишем:

var
data, results: TStringlist;
begin
data:= TStringlist.Create; //инициализируем массив строк для параметров
results:= TStringList.Create; //инициализируем массив строк для ответа
//Помните говорили о заголовках? Вот, это они. "Маскируемся" под браузер, грубо говоря
with idhttp.Request do
begin
UserAgent:='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.13014 YaBrowser/13.12.1599.13014 Safari/537.36';
Host:='

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.


ContentType:='application/x-www-form-urlencoded';
Connection:='keep-alive';
end;
//Передача нужных параметров
data.Add('login_name='+ edit1.Text);
data.Add('login_password='+ edit2.Text);
data.Add('login=submit');
//Отправка запроса
results.Text:= idhttp.Post('

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

', data);
//Проверка, успешен ли запрос
if pos ('Панель управления', results.Text) <> 0 then ShowMessage('Авторизация успешна!');
end;


Как видим - всё просто. Результат будет тот же - всё успешно:



Выше мы рассмотрели что такое запросы и как их применять. Удачи в обучении и спасибо за внимание.
 
Вверх Снизу