Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как отослать данные формы с ENCTYPE=multipart/form-data [D6, Win95/98, Win2k]


sergeport ©   (2004-02-18 21:28:00) 

подскажите, плз. мне нужно передать данные perl-скрипту методом пост, а именно: данные формы с ENCTYPE=multipart/form-data. т.е. надо передать файл для загрузки (тэг <input type='file' name='file_to_load'>). пробовал юзать компонент TNMHTTP - не вышло, он по-моему ваще глючит с POST-запросами :(

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

пишу на D6


sergeport   (2004-02-21 12:20:00) [1]

сенкс, я уже сам допер. сделал через TTCPClient

procedure TmainForm.sendFormButtonClick(Sender: TObject);
var
 fileName, postData, firstReceived : String;
 stream : TFileStream;
 buf : Char;
 i : Integer;
begin
//  tcpC - TTCPClient
 tcpC.Sendln('POST /cgi-bin/upload.cgi HTTP/1.1');
 tcpC.Sendln('Content-Type: application/x-www-form-urlencoded; boundary=---------------------------7d4245307104b0');
 tcpC.Sendln('Host: myhost.com');
  postData := 'login=mylogin&password=mypassword&uploadedfile=FULL_PATH_TO_FILE';
 tcpC.Sendln('Content-Length: '+ inttostr(length(postData)));
 tcpC.Sendln('');
 tcpC.Sendln(postData);
 tcpC.Sendln('');
 fileName := 'FULL_PATH_TO_FILE';
 try
   stream := TFileStream.Create(fileName, fmOpenReadWrite);
   tcpC.SendStream(stream);
   for i := 0 to stream.Size - 1 do
     begin
       Stream.Seek(i,soFromBeginning);
       stream.Read(buf,1);
       tcpC.SendBuf(buf,1);
     end;
 finally
   stream.Free;
 end;
 tcpC.Sendln('---------------------------7d4245307104b0');
 firstReceived := tcpC.Receiveln();
end;


sergeport   (2004-02-21 01:10:00) [2]

сорри за назойливость. а можно привести какой-нить прииер? буду очень признателен :)


Reindeer Moss Eater   (2004-02-19 11:46:00) [3]

Какого надо тебе - не знаю.
Можно использовать любого TCP клиента


sergeport   (2004-02-19 11:34:00) [4]

а какой компонент надо использовать? можно подробнее, плз?


Reindeer Moss Eater   (2004-02-19 09:10:00) [5]

Соединяешься с web сервером.
Формируешь заголовок POST, задаешь boundaries и содержимое параметров.
Отслылаешь все это несколькими Writeln;
Завершаешь еще одним пустым Writeln.
Далее пересылаешь двоичные данные файла.
Когда они закончились отправляешь boundary + '--'
Все.


Наверх

Титульная страница Поиск, карта сайта Написать письмо