Последняя версия DataExpress 2021.02.22

Изображение Скачать | Изображение Что нового?

HttpClient - Русский текст в запросе

Вопросы о применении того или иного класса или функции.
Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 19 фев 2021, 19:36

Пытаюсь прикрутить поиск с помощью SOLR.
Из DataExpress (версия 2021.01.18) нужно сделать запрос по такой схеме:

var HC: THttpClient;
HC.Send('GET', 'http://localhost:8983/solr/mybase/select?fl=myfield&q=русские буквы');

Сервер SOLR выдает ошибку: error 500 The query string contains a not-%-escaped byte > 127 at position 10.

То есть русские символы в таком виде не понимает.

Пробовал писать так:

HC.Send('GET', 'http://localhost:8983/solr/mybase/select?fl=myfield&q=%D1%80%D1%83%D1%81%D1%81.....и т.д.

Та же ошибка.

Но если в запросе (после q= )английский текст, то все в порядке. Без ошибок возвращается результат поиска в THttpClient(Sender).Content.

Подскажите, пожалуйста, можно ли что-то с этим сделать?

Михаил.

Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 20 фев 2021, 20:57

Дополнение:

Нужно, чтобы в сервер приходил запрос с русскими буквами в %-escaped виде. Тогда все отрабатывает хорошо. Проверил браузером.

Посмотрел в логах Solr'а, что же к нему приходит из DataExpress в запросе.
Оказалось, что при любом варианте:
так - q=русские буквы
или так - q=%D1%80%D1%83%D1%81%D1%81.....
на вход поступает почему-то именно это: q=русские буквы.
То есть, DataExpress перед тем, как пульнуть в сервер запрос, все равно преобразует %-escaped в слова, а этого в моём случае не надо бы делать.
Теперь можно конкретизировать вопрос: возможно ли сделать так, чтобы в сервер уходило именно так: q=%D1%80%D1%83%D1%81%D1%81..... ? То есть, без преобразования.
И заодно, есть ли готовая функция, которая из кириллической строки делает %-escaped строку?

Аватара пользователя
admin
Разработчик
Сообщения: 5523
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 51 раз
Поблагодарили: 427 раз

HttpClient - Русский текст в запросе

Сообщение admin » 20 фев 2021, 22:32

Можете сделать пример базы с проблемой?
Mike_VG писал(а):И заодно, есть ли готовая функция, которая из кириллической строки делает %-escaped строку?

Не предусмотрено.

Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 20 фев 2021, 23:41

admin писал(а):Можете сделать пример базы с проблемой?
Mike_VG писал(а):И заодно, есть ли готовая функция, которая из кириллической строки делает %-escaped строку?

Не предусмотрено.


А как проверить то? Нужно же запускать поисковый Solr-сервер. А в DataExpress такой код:

Код: Выделить всё

    procedure ButtonClick(Sender: TObject);
    var S: String;
    begin
  //    HC.AddHeader('Content-Type','text/html;charset=utf-8');  разные хедеры прописывал, не помогает.
      S:= 'http://localhost:8983/solr/ofta1/select?q=name%3A%D1%80';
      debug(S);
      HC.Send('GET', S);
 
    end;       

Аватара пользователя
admin
Разработчик
Сообщения: 5523
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 51 раз
Поблагодарили: 427 раз

HttpClient - Русский текст в запросе

Сообщение admin » 21 фев 2021, 11:38

Я отключу преобразование URI в классе THttpClient.

Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 21 фев 2021, 13:25

Посмотрел, что же все-таки отправляет HttpClient.
Оказалось, что как не оформляй строку запроса (русскими буквами или %escaped последовательностями), в мир уходит вот такая штука:
\xD1\x80 - буква "р" , т.е. вместо "%" мы имеем "\x"

Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 21 фев 2021, 16:11

Вопрос решил. Тему можно закрывать.

Аватара пользователя
admin
Разработчик
Сообщения: 5523
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 51 раз
Поблагодарили: 427 раз

HttpClient - Русский текст в запросе

Сообщение admin » 21 фев 2021, 19:12

Как решили?

Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 21 фев 2021, 21:14

Через костыль на сервере

Mike_VG
Новичок
Сообщения: 13
Зарегистрирован: 29 мар 2019, 19:57
Благодарил (а): 1 раз
Поблагодарили: 2 раза

HttpClient - Русский текст в запросе

Сообщение Mike_VG » 23 фев 2021, 16:37

Попробовал новый encodeURIElement. Немного "перебарщивает", если применить на всю строку:

http%3A%2F%2F192.168.1.34%3A8983%2Fsolr%2Fmybase%2Fselect%3Fq%3Dname%3A%D1%80%D1%83%D1%81

Но если напустить только на кириллические буквы в запросе, то все в порядке. Работает. Сервер отвечает без ошибок.

Спасибо!


Вернуться в «Вопросы по API DataExpress.»