Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2016, 22:59   #1
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию IdMultipartFormDataStream

Привет всем.

Нужно отправить на сервер запрос multipart/form-data такого вида:

--Asrf456BGe4h
Content-Disposition: form-data; name="DestAddress"
(пустая строка)
brutal-vasya@example.com
--Asrf456BGe4h

brutal-vasya@example.com - это у нас строка такая. Как сделать Boundery я разобрался, поле с именем тоже создал. В инете куча материала, как отправлять файл через multipart/form-data, но как мне в качестве объекта использовать обычную строку, я не нашел. Подскажите, пожалуйста
greenisius вне форума Ответить с цитированием
Старый 09.04.2016, 23:21   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
В инете куча материала, но как мне в качестве объекта использовать обычную строку, я не нашел
А необычную как?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2016, 23:35   #3
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А необычную как?
http://users.atw.hu/delphicikk/lista...id=37&oldal=54

Код:
procedure TForm1.SendPostData;
const
  CRLF = #13#10;
var
  aStream: TMemoryStream;
  Params: TMemoryStream;
  S: string;
begin
  aStream := TMemoryStream.create;
  Params := TMemoryStream.Create;

  HTTP.Request.ContentType := 'multipart/form-data;
    boundary = - - - - - - - - - - - - - - - - - - - - - - - - - - - - -7
      cf87224d2020a';

  try
    S := '-----------------------------7cf87224d2020a' + CRLF +
      'Content-Disposition: form-data; name="file1"; filename="c:abc.txt"' +
      CRLF +
      'Content-Type: text/plain' + CRLF + CRLF +
      'file one content. Contant-Type can be application/octet-stream or if
    you want you can ask your OS fot the exact type
    .' + CRLF +
      '-----------------------------7cf87224d2020a' + CRLF +
      'Content-Disposition: form-data; name="sys_return_url2"' + CRLF + CRLF +
      'hello2' + CRLF +
      '-----------------------------7cf87224d2020a--';

    Params.Write(S[1], Length(S));

    with HTTP do
    begin
      try
        HTTP.Post('http://www.mydomain.com/postexampe.cgi', Params,
          aStream);
      except
        on E: Exception do
          showmessage('Error encountered during POST: ' + E.Message);
      end;
    end;
    aStream.WriteBuffer(#0' ', 1);
    showmessage(PChar(aStream.Memory));
  except
  end;
end;
Вот так. Но результат выходит хреновый.




После каждого символа пробел.

Последний раз редактировалось Alex11223; 09.04.2016 в 23:51.
greenisius вне форума Ответить с цитированием
Старый 09.04.2016, 23:37   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что именно не так?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2016, 23:41   #5
greenisius
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 67
По умолчанию

Я загоняю вручную в MemoryStream строку согласно формату, перевод строки как #13#10, получается такое вот.
greenisius вне форума Ответить с цитированием
Старый 09.04.2016, 23:47   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Какие версии Дельфи и Indy? Скорее всего тот код был написан для старых Дельфи, где String=AnsiString, а у вас 2009 или выше, где String=WideString (юникод / utf-16)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.04.2016, 00:29   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

поменяйте тип S на AnsiString.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отредактировать файл который в IdMultiPartFormDataStream bakanaev Общие вопросы Delphi 4 25.03.2013 09:21
Кодировка idmultipartformdatastream в Delphi 2009 Viteef Работа с сетью в Delphi 10 20.04.2010 13:35