Форум: "Начинающим";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];
ВнизОтправка файла post запросом, вместо параметра вопросы Найти похожие ветки
← →
Погроммист (2016-04-04 02:33) [0]
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} мне как то непонятно, но может из за нее параметр не добавляется. А что делать?
← →
KSergey © (2016-04-04 10:37) [1]А веб-сервер на какую кодировку настроен?
← →
KSergey © (2016-04-04 10:40) [2]Еще вот тут опробуйте читнуть, вдруг что-то поможет
http://forum.vingrad.ru/forum/topic-318946.html
← →
Погроммист (2016-04-04 16:02) [3]ну видимо на UTF8, а как узнать?
но главная проблема, что значит {$IFDEF STRING_IS_ANSI} когда этот параметр активен и почему я не могу его использовать?
← →
Awak00m (2016-04-04 20:28) [4]Возможно, я ошибаюсь, я не встречал передачи кириллицы без кодировки в %ХХ.
{$IFDEF STRING_IS_ANSI} насколько я понимаю, относится не к кодировке, а к размеру типа Char. И тогда, это зависит только от версии Delphi.
А на том конце сервер Ваш? Если да, то закодируйте все, что хотите, в BASE64, на том конце раскодируйте, и можете хоть дампы памяти передавать. Я бы так сделал.
← →
Погроммист (2016-04-05 01:37) [5]попробовал перекодировать в Base64
ProductName := EncodeString(ProductName);
результат "xODw6iDu8OHo8g=="
а сервер получает "xODw6iDu8OHo8g=3D=3D"
почему? как исправить?
← →
Погроммист (2016-04-05 01:42) [6]он символ "=" в ходе передачи превращает в "=3D"
← →
Погроммист (2016-04-05 02:33) [7]а если скрипт запустить из командной строки браузера и передать "=" то в скрипт приходит тоже "=" :-(
Т.е. это IdMultiPartFormDataStream какую то фигню отправляет (
← →
Погроммист (2016-04-05 02:35) [8]причем если после заполнения вызывать temp := formData.FFields.Items[3].FieldValue;
то значение "=", где появляется это 3D?
← →
Погроммист (2016-04-05 04:59) [9]эм нашел, если сделать так
formData.AddFormField("ProductName", "=").ContentTransfer := "8bit";
то вроде норм.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2018.03.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c