idHTTP.GET или idHTTP.POST

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

С помощью idHTTP.GET или idHTTP.POST пытаюсь организовать несколько потоков, а именно:
необходимо отправить данные в несколько скриптов и получить результат сразу с нескольких страничек.
У меня получается что idHTTP.GET или idHTTP.POST выполняются последовательно, т.е. пока idHTTP1 не закончит работу idHTTP2 не отправляет запрос и т.д.
 
C

CzR

Ну ты блин даешь человек =)) А ты класс TThread юзал?? И вообще, в многопоточных прогах.... если необходимо держать их более 30, то советую не использовать компоненты Indy - это глючная хрень!! Прога будет ужасно глючить и тормозить! Надо писать самому.. на сокетах.... либо юзать высокоуровневый WinInet АПИ, либо найти в нете класс реализующий протокол TCP и на основе его делать нужные ХТТП запросы! Хех)
 
C

CzR

А без параллельных потоков (класс TThread) ты не сможешь сделать то что хочешь, т.к. ИНДИ не поддерживает н*цензура*кирующие сокеты!
 
G

Guest

Есть вебформа <form action="logon.php" method="post"> состоящая из следующих полей:

Код:
<input class="post" type="text" name="username" tabindex="1" />
<input class="post" type="password" name="password" tabindex="2" />
<input class="text" type="checkbox" name="autologin" tabindex="3" />
<input type="submit" class="mainoption" name="login" value="Вход" tabindex="4" />

Поручили создать простейшее приложение автоматического залогинивания. Поместив на форму экземпляр компонента IdHTTP, назначил следующий обработчик для кнопки:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
LoginInfo: TStrings;
Response: TStringStream;
begin
LoginInfo := TStringList.Create;
Response := TStringStream.Create('');
 LoginInfo.Clear;
 LoginInfo.Add('username=MyName');
 LoginInfo.Add('password=MyPass');
 IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response);
 showmessage(Response.DataString);
Response.Free;
LoginInfo.Free;
end;

Однако, после подключения к серверу программа выдает исключение “Invalide argument to date encode”. Что не так? Delphi 6.0.
 
D

DZX

Indy в потоках глючит ого-го, проходили,
и отслеживать и убивать зависшие потоки пробывал, все одно особого толку не вышло.
 
B

Barmutik

Инди вещь глючная .. построить на ней что-то стоящее сложно .. НО МОЖНО ...

Мы выходили из этой ситуации запуском и менеджментом процессов с откачками...
 
G

Guest

Инет-программирование – не мой профиль, поэтому судить о глючности Индии-компонентов не берусь. Но ситуация кардинально изменилась после установки Delphi 7:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
data: TIdMultiPartFormDataStream;
begin
data := TIdMultiPartFormDataStream.Create;
data.AddFormField('username', 'MyName');
data.AddFormField('password', 'MyPass');
Memo1.Lines.Text := IdHTTP1.Post('http://MyServer.xxx/login.php',data);
data.Free;
end;

В компонент Memo принимается HTML-код страницы, возвращаемой скриптом login.php. Проблема в том, что скрипту необходимо отправлять значение еще одного поля – login. Фактически, это кнопка c надписью «Вход» – браузер еще дописывает &login=%D0%92%D1%85%D0%BE%D0%B4. Если изменить название кнопки – параметр login кодируется по-иному. Может подскажите, алгоритм или функцию кодирования?
 
D

DZX

А если дописать в строку запроса &login=%D0%92%D1%85%D0%BE%D0%B4 не работает?
Кстати в 7-ом используется 9-я версия компонентов можно скачать из инета последнию 10-ю и проставить. В 10-й версии уже стоят 10-ые компоненты.
 
G

Guest

Для: DZX

2 особенности:
- дописывать нельзя, т.к. параметры передаются методом POST, а не GET.
- добавление параметра login и его значение в виде
data.AddFormField(‘login’, ‘%D0%92%D1%85%D0%BE%D0%B4’);
провоцирует ошибку на этапе инициализации параметра до подключения к серверу.
 
G

Guest

И еще такой вопрос. Логинюсь на сервер посредством своей программы… в случае неверного пароля, скрипт возвращает соответствующую HTML-стрницу, исходный код которой я анализирую для проверки успешности залогинивания. В случае успешной аутентификации скрипт также возвращает HTML-код, но на этапе передачи принятых данных DataString в Memo происходит ошибка: rised exeption class EIdHTTPProtocolException 'HTTP/1.1 302 Found’. Process Stopped.

IdHTTP1.Post('http://мойсервер/login.php', ParamData, PostDataStream);
Memo1.Text:=PostDataStream.DataString;

Что это за ошибка и как правильно принять DataString или хотя бы обработать это исключение?
 
D

DZX

Что то мне подсказывает что дописать всетаки можно. Можно Post с Get совместить таким образом. Для того что бы разобрать ся надо разобрать по запчастям реальную форму которая постит, и сделать так же.
По ошибке первым делом нано узнать в что означает 302 ошибка протокола, а потом думать почему.
Обойти ошибку в лоб можно, но можно ли будет после этого коректно сотрудничаь далее с сервером, вопрос...
 
G

Guest

IdHTTP1.HandleRedirects := True;
И боль прошла!!! :angry:
 
S

SH2008

Джангл Виталий
так какой в итоге получился код, напиши, есть схожие проблемы
 
R

Rust

Есть вебформа <form action="logon.php" method="post"> состоящая из следующих полей:


<input class="post" type="text" name="username" tabindex="1" /><input class="post" type="password" name="password" tabindex="2" /><input class="text" type="checkbox" name="autologin" tabindex="3" /><input type="submit" class="mainoption" name="login" value="Вход" tabindex="4" />

Поручили создать простейшее приложение автоматического залогинивания. Поместив на форму экземпляр компонента IdHTTP, назначил следующий обработчик для кнопки:


procedure TForm1.Button1Click(Sender: TObject);var LoginInfo: TStrings; Response: TStringStream;begin LoginInfo := TStringList.Create; Response := TStringStream.Create(''); LoginInfo.Clear; LoginInfo.Add('username=MyName'); LoginInfo.Add('password=MyPass'); IdHTTP1.Post('http://mywebsite.xxx/login.php',LoginInfo,Response); showmessage(Response.DataString); Response.Free; LoginInfo.Free;end;

Однако, после подключения к серверу программа выдает исключение ”Invalide argument to date encode”. Что не так? Delphi 6.0.

У меня похожий вопрос, уже нигде неделю немогу найти ответ. Мне нужно отправить post php скрипту после попытки отправить сервер выдает ошибку типа переменные неопределенны, тоесть запрос то происходит а переменные никак не отправляются
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!