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

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

Отправка файла post запросом, вместо параметра вопросы


Погроммист ©   (2016-04-04 02:33:00) 


Function Upload(Fi: TStream; AFileName: AnsiString;
  ProductName: AnsiString): boolean;
var
 formData: TMyIdMultiPartFormDataStream;

begin
 Result := false;

 formData := TMyIdMultiPartFormDataStream.Create;
 formData.AddFileStream('file', AFileName, Fi);
 formData.AddFormField('ProductName', ProductName); //тут русский

 IdHTTP.Request.AcceptCharSet := 'windows-1251';
 IdHTTP.Request.ContentType := 'multipart/form-data';  

   errorMessage := IdHTTP.Post(URL, formData,IndyTextEncoding(1251)
);


пытаюсь пост запросом отправить файл и параметры с ним, параметры могут быть на кирилице. Но пхп скрипт получает эту кирилицу в виде '?????????'. Нашел несколько тем на эту тему, но так и не понял что мне делать. В методе пост есть третий параметр, как раз про кодировку, но вот что туда нужно передавать и как я понять не могу. Попробовал передавать IndyTextEncoding(1251), но он говорит что такой перегруженной функции нет, которую можно вызывать с такими параметрами.

функция пост объявлена там как

TIdCustomHTTP.Post(AURL: string; ASource: TIdMultiPartFormDataStream
 {$IFDEF STRING_IS_ANSI}; ADestEncoding: IIdTextEncoding = nil{$ENDIF}

и вот  что значит директива {$IFDEF STRING_IS_ANSI} мне как то непонятно, но может из за нее параметр не добавляется. А что делать?


Погроммист   (2016-04-05 04:59:00) [1]

эм нашел, если сделать так

formData.AddFormField('ProductName', '=').ContentTransfer := '8bit';

то вроде норм.


Погроммист   (2016-04-05 02:35:00) [2]

причем если после заполнения вызывать temp := formData.FFields.Items[3].FieldValue;

то значение '=', где появляется это 3D?


Погроммист   (2016-04-05 02:33:00) [3]

а если скрипт запустить из командной строки браузера и передать '=' то в скрипт приходит тоже '=' :-(

Т.е. это IdMultiPartFormDataStream какую то фигню отправляет (


Погроммист   (2016-04-05 01:42:00) [4]

он символ '=' в ходе передачи превращает в '=3D'


Погроммист   (2016-04-05 01:37:00) [5]

попробовал перекодировать в Base64

ProductName        := EncodeString(ProductName);

результат 'xODw6iDu8OHo8g=='

а сервер получает 'xODw6iDu8OHo8g=3D=3D'

почему? как исправить?


Awak00m   (2016-04-04 20:28:00) [6]

Возможно, я ошибаюсь, я не встречал передачи кириллицы без кодировки в %ХХ.
{$IFDEF STRING_IS_ANSI} насколько я понимаю, относится не к кодировке, а к размеру типа Char. И тогда, это зависит только от версии Delphi.

А на том конце сервер Ваш? Если да, то закодируйте все, что хотите, в BASE64, на том конце раскодируйте, и можете хоть дампы памяти передавать. Я бы так сделал.


Погроммист   (2016-04-04 16:02:00) [7]

ну видимо на UTF8, а как узнать?

но главная проблема, что значит {$IFDEF STRING_IS_ANSI} когда этот параметр активен и почему я не могу его использовать?


KSergey   (2016-04-04 10:40:00) [8]

Еще вот тут опробуйте читнуть, вдруг что-то поможет
http://forum.vingrad.ru/forum/topic-318946.html


KSergey   (2016-04-04 10:37:00) [9]

А веб-сервер на какую кодировку настроен?


Наверх

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