Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 29
1

Отправка POST запроса компонентом IdHTTP

25.06.2016, 17:37. Показов 5720. Ответов 5
Метки нет (Все метки)

Здравствуйте! Решаю простенькую задачку! Есть файл index.php. Там описана форма, состоящая из текстового поля и кнопки submit. При нажатии на кнопке сервер выводит строку, введённую в тестовое поле! Мне нужно из моей программы на C++ Builder послать POST запрос, т.е аналог нажатия кнопки sumbit в браузере.
Вот код!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString url = "http://127.0.0.1/klient/index.php";
TStringStream *stream = new TStringStream(NULL);
 
TStringList *List = new TStringList;
List->Add("Fam=boek");
 
    try
     {
       IdHTTP1->Post(url,List,stream);
     }
catch(EIdException &E)
  {
     Memo1->Text = "Ошибка:\n"+E.Message;
  }
  Memo1->Text = stream->DataString;
  delete stream;
  delete List;
}
Но в Memo1 выводится код страницы, такой, если бы была не нажата кнопка submit, т.е не выполнен POST-запрос. В чём моя ошибка? Спасибо большое!
Привожу код файла страницы:
HTML5
1
2
3
4
5
6
7
8
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<title>Клиент-сервер</title>
</head>
 
<body>
PHP
1
2
3
4
5
6
7
8
9
10
  <?php
        echo "<form method=post name=form1 action=index.php>
            <input type=text maxlength=45 name=Fam>
           <input type=submit >
       </form>
        ";
 if ($_POST!=NULL)
echo $_POST['Fam']."<br>";
print_r($_POST);
 ?>
HTML5
1
2
</body>
</html>
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2016, 17:37
Ответы с готовыми решениями:

Кодировка в теле POST-запроса (idHTTP)
Добрый день. Помогите люди добрые, уже не знаю куда бежать, весь инет перерыл. Вот простенький...

Отправка запроса Post для загрузки картинки на сайт
Уже около 6 часов шерстю интернет в поисках ответа, но так ничего и не могу найти. Делал все по...

IdHttp::Post()
Люди, хелп! пытаюсь зарегится на сайте с помощью IdHttp-&gt;Post()....сервер идет в отказ, думаю дело...

IdHTTP - ошибка Get запроса
Всем доброго времени суток. В общем, что бы не расписывать свою проблему, приложу скриншот (слева,...

5
64 / 64 / 16
Регистрация: 07.05.2016
Сообщений: 304
26.06.2016, 06:59 2
работу скрипта проверяли?
вообще все верно вроде у вас, так делаю я.

C++
1
2
3
4
5
TStringStream *respon = new TStringStream();
TStringList *post= new TStringList("");
post->Add(UnicodeString("param1=")+UnicodeString(Edit1->Text));
post->Add(UnicodeString("param2=")+UnicodeString(Edit2->Text));
IdHTTP1->Post(host+"slogin.php",post,respon);

у вас в скрипте видимо все же ошибка, либо в ответ приходит содержимое если скажем на сервере Php вовсе не установлен, могу ошибатся...
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 29
26.06.2016, 12:05  [ТС] 3
Да! Работу скрипта проверял как в браузере, так и через C++ Builder отправкой GET-запроса! (ну естественно поменяв код в PHP на метод GET и использование массива $_GET). Всё корректно работало! А вот с POST какая-то неувязочка!

Добавлено через 9 минут
А для чего вы используете UnicodeString? Спасибо!
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 490
Записей в блоге: 9
26.06.2016, 12:24 4
AlexXXX_96, а ты сниффером смотрел, какие пакеты отправляются?

Добавлено через 1 минуту
https://www.cyberforum.ru/blog... og608.html
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 29
26.06.2016, 12:37  [ТС] 5
Вот скрин программы Charles!
0
Миниатюры
Отправка POST запроса компонентом IdHTTP  
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 29
26.06.2016, 13:43  [ТС] 6
Это код в C++ Builder. В RichEdit лежит "Fam=boek"
C++
1
2
3
4
5
6
AnsiString url = "http://127.0.0.1/klient/index.php";
TStringStream *stream = new TStringStream(NULL);
       IdHTTP1->Post(url,RichEdit1->Lines,stream);
  Memo2->Text = "Всё гут";
  Memo1->Text = stream->DataString;
  delete stream;
Это код php-скрипта, выполняющегося на сервере!
PHP
1
2
3
4
5
6
7
8
9
10
11
12
  <?php
        echo "<form method=post name=form1 action=index.php>
            <input type=text maxlength=45 name=Fam>
           <input type=submit>
       </form>
        ";
 if ($_POST!=NULL)
echo $_POST['Fam']."<br>";
 else
echo "Всем привет!!!";
print_r($_POST);
 ?>
При отправке POST-запроса через C++ Builder в Memo1 выводится код страницы, где написано "Всем привет", т.е массив $_POST =NULL. Значит ошибка в отправке запроса! Что необходимо исправить?

Добавлено через 47 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString url = "http://127.0.0.1/klient/index.php";
TStringStream *stream = new TStringStream(NULL);
TStringList *List = new TStringList;
List->Add("Fam=Boykow");
 
//Ïàðàìåòðû çàïðîñà
//IdHTTP1->Host = "127.0.0.1";
//IdHTTP1->Request->ContentLength = 7;
//IdHTTP1->Request->Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
//IdHTTP1->Request->Referer = "http://127.0.0.1/klient/";
//IdHTTP1->Request->AcceptEncoding = "gzip, deflate";
//IdHTTP1->Request->AcceptLanguage = "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4";
IdHTTP1->Request->ContentType = "application/x-www-form-urlencoded";
 
       IdHTTP1->Post(url,List,stream);
  Memo2->Text = "Всё гут!";
  Memo1->Text = stream->DataString;
  delete stream;
  delete List;
}
Это код, который заработал! Получается для корректного запроса достаточно указать ContentType?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2016, 13:43

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

IdHTTP - Ошибка при отправке запроса
Всем привет, у меня возникла небольшая проблема. Решил научится работать с API и тп, но вот во...

IdHTTP POST запрос. Как получить содержимое ответа переданное в окно?
Посылаю post на авторизацию, возвращается заглавная страница с подтверждением. Все ок. Далее...

Компонент IdHTTP - данные авторизации магическим образом изымаются из запроса
Здравствуйте! Ниже приведен код запроса картинки у камеры: TFileStream* FILE_STREAM = new...

Отправка post информации (картинка)
Перед написанием программы я сниффлю и я вижу: http://screenshot.ru/B2g Затем пишу такой код....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.