Пытаюсь прикрутить поиск с помощью 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.
Подскажите, пожалуйста, можно ли что-то с этим сделать?
Михаил.


HttpClient - Русский текст в запросе
-
- Новичок
- Сообщения: 13
- Зарегистрирован: 29 мар 2019, 19:57
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
HttpClient - Русский текст в запросе
Дополнение:
Нужно, чтобы в сервер приходил запрос с русскими буквами в %-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 строку?
Нужно, чтобы в сервер приходил запрос с русскими буквами в %-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 - Русский текст в запросе
Можете сделать пример базы с проблемой?
Не предусмотрено.
Mike_VG писал(а):И заодно, есть ли готовая функция, которая из кириллической строки делает %-escaped строку?
Не предусмотрено.
-
- Новичок
- Сообщения: 13
- Зарегистрирован: 29 мар 2019, 19:57
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
HttpClient - Русский текст в запросе
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;
-
- Новичок
- Сообщения: 13
- Зарегистрирован: 29 мар 2019, 19:57
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
HttpClient - Русский текст в запросе
Посмотрел, что же все-таки отправляет HttpClient.
Оказалось, что как не оформляй строку запроса (русскими буквами или %escaped последовательностями), в мир уходит вот такая штука:
\xD1\x80 - буква "р" , т.е. вместо "%" мы имеем "\x"
Оказалось, что как не оформляй строку запроса (русскими буквами или %escaped последовательностями), в мир уходит вот такая штука:
\xD1\x80 - буква "р" , т.е. вместо "%" мы имеем "\x"
-
- Новичок
- Сообщения: 13
- Зарегистрирован: 29 мар 2019, 19:57
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
HttpClient - Русский текст в запросе
Попробовал новый encodeURIElement. Немного "перебарщивает", если применить на всю строку:
http%3A%2F%2F192.168.1.34%3A8983%2Fsolr%2Fmybase%2Fselect%3Fq%3Dname%3A%D1%80%D1%83%D1%81
Но если напустить только на кириллические буквы в запросе, то все в порядке. Работает. Сервер отвечает без ошибок.
Спасибо!
http%3A%2F%2F192.168.1.34%3A8983%2Fsolr%2Fmybase%2Fselect%3Fq%3Dname%3A%D1%80%D1%83%D1%81
Но если напустить только на кириллические буквы в запросе, то все в порядке. Работает. Сервер отвечает без ошибок.
Спасибо!