gonzales Опубликовано 19 ноября, 2020 Поделиться Опубликовано 19 ноября, 2020 Доброго времени суток! Помогите плиз, чет я запарился, не могу найти решение. Мне нужно сделать GET запрос к серверу с параметрами, содержащими русские буквы. Примерно вот такой 'method=update&OrderNum='+ordernum+'&FieldName='+grid.Columns[ACol].Header+'&FieldValue='+ UTF8Encode('русские буквы'); Запрос передаю через idHTTP. UTF8Encode не работает, или я им пользоваться не умею. Подскажите, как правильно сделать? Цитата Ссылка на комментарий
0 gonzales Опубликовано 19 ноября, 2020 Автор Поделиться Опубликовано 19 ноября, 2020 bytes := BytesOf(s1); bytes:=TEncoding.Convert(TEncoding.Default,TEncoding.UTF8,bytes); s2 := StringOf(bytes); Пробовал еще вот так, перебирал кодировки - ничего не помогло((( Цитата Ссылка на комментарий
0 Tumaso Опубликовано 19 ноября, 2020 Поделиться Опубликовано 19 ноября, 2020 попробуй вот так: procedure Get(const ASession: TIdHTTP; const AUrl: string; const AResult: TStringStream); begin ASession.Get(ASession.URL.URLEncode(AUrl), AResult); end; где AUrl - твой урл с параметрами gonzales 1 Цитата Ссылка на комментарий
0 slav_z Опубликовано 20 ноября, 2020 Поделиться Опубликовано 20 ноября, 2020 вообще запрос с русскими буквами выглядит примерно так: fire-monkey.ru/topic/6993-%D0%B7%D0%B0%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83-%D0%B2-utf8-%D0%B4%D0%BB%D1%8F-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8-%D0%B2-get-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B5/ Используйте это: uses System.NetEncoding; ... S:=TNetEncoding.URL.EncodePath('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8'); Цитата Ссылка на комментарий
0 gonzales Опубликовано 20 ноября, 2020 Автор Поделиться Опубликовано 20 ноября, 2020 6 часов назад, slav_z сказал: S:=TNetEncoding.URL.EncodePath('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8'); странно, но почему-то такая конструкция упорно ставит первым символом /. То есть возвращает '/http://firemonkey.ru..... Естественно запрос не отрабатывается Цитата Ссылка на комментарий
0 gonzales Опубликовано 20 ноября, 2020 Автор Поделиться Опубликовано 20 ноября, 2020 13 часов назад, Tumaso сказал: попробуй вот так: procedure Get(const ASession: TIdHTTP; const AUrl: string; const AResult: TStringStream); begin ASession.Get(ASession.URL.URLEncode(AUrl), AResult); end; где AUrl - твой урл с параметрами А вот это работает корректно!!! Спасибо большое!!! Цитата Ссылка на комментарий
0 gonzales Опубликовано 20 ноября, 2020 Автор Поделиться Опубликовано 20 ноября, 2020 Переделал только немного под себя, чтобы строку в ответ выдавал function TForm1.Get(const ASession: TIdHTTP; const AUrl: string):string; begin result:=ASession.Get(ASession.URL.URLEncode(AUrl)); end; Tumaso 1 Цитата Ссылка на комментарий
0 slav_z Опубликовано 20 ноября, 2020 Поделиться Опубликовано 20 ноября, 2020 5 часов назад, gonzales сказал: странно, но почему-то такая конструкция упорно ставит первым символом /. То есть возвращает '/http://firemonkey.ru..... Естественно запрос не отрабатывается S:=TNetEncoding.URL.EncodeQuery('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8'); ...и вам вполне подойдет THTTPClient для любых запросов... gonzales 1 Цитата Ссылка на комментарий
0 slav_z Опубликовано 22 ноября, 2020 Поделиться Опубликовано 22 ноября, 2020 а.. вот еще что: THTTPClient сам кодирует строку запроса, без всякой дополнительной фигни... очень хороший объект... реализованный просто замечательно... Client:=THTTPClient.Create; var Response:=Client.Get('http://fire-monkey.ru/topic/6993-закодировать-строку-в-utf8-для-передачи-в-get-запросе/#comment-40498'); if Response.StatusCode=200 then ... Client.Free; gonzales 1 Цитата Ссылка на комментарий
0 Tumaso Опубликовано 22 ноября, 2020 Поделиться Опубликовано 22 ноября, 2020 9 часов назад, slav_z сказал: а.. вот еще что: THTTPClient сам кодирует строку запроса, без всякой дополнительной фигни... очень хороший объект... реализованный просто замечательно... Согласен, THTTPClient более удобен в использовании, чем Indy. Еще существенный плюс - поддержка ssl из коробки, не нужно ничего дополнительно ставить. У Indy на андроиде 6+ с этим проблемы Цитата Ссылка на комментарий
0 gonzales Опубликовано 7 декабря, 2020 Автор Поделиться Опубликовано 7 декабря, 2020 Доброго времени суток. А не подскажете, как обратную задачку решить? В ответе сервера есть русские буквы, соответственно отображается крокозябами. Как перевести в нормальный вид? Пробовал использовать Utf8ToAnsi - не помогло, кроказябы только поменялись на другие))) Подозреваю, что ответ приходит в юникоде, так как на серверной стороне отвечает микроконтроллер, но это не точно, так как идет еще редирект через какое-то облако по https. Цитата Ссылка на комментарий
0 gonzales Опубликовано 7 декабря, 2020 Автор Поделиться Опубликовано 7 декабря, 2020 Решил вопрос var sstream: TStringStream; begin sstream := TStringStream.Create('', TEncoding.UTF8); HTTP.Get(Url, sstream); showmessage(sstream.DataString); end; Не работает кнопка Код, поэтому выложил просто текстом Цитата Ссылка на комментарий
0 gonzales Опубликовано 7 декабря, 2020 Автор Поделиться Опубликовано 7 декабря, 2020 В 22.11.2020 в 13:25, Tumaso сказал: Согласен, THTTPClient более удобен в использовании, чем Indy. Еще существенный плюс - поддержка ssl из коробки, не нужно ничего дополнительно ставить. У Indy на андроиде 6+ с этим проблемы Да, тоже вдоволь натрахался с ssl на андроиде, в результате попробовал THTTPClient, остался доволен как слон, работает из коробки, никакого головняка, в общем хороший компонент, рекомендую Цитата Ссылка на комментарий
Вопрос
gonzales
Доброго времени суток!
Помогите плиз, чет я запарился, не могу найти решение. Мне нужно сделать GET запрос к серверу с параметрами, содержащими русские буквы. Примерно вот такой
'method=update&OrderNum='+ordernum+'&FieldName='+grid.Columns[ACol].Header+'&FieldValue='+ UTF8Encode('русские буквы');
Запрос передаю через idHTTP.
UTF8Encode не работает, или я им пользоваться не умею.
Подскажите, как правильно сделать?
Ссылка на комментарий
12 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.