Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кирилица в SOAP-запросе / 24 сообщений из 24, страница 1 из 1
02.08.2019, 09:25
    #39844420
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Добрый день уважаемые знатоки! Второй день бьюсь над темой передачи в SOAP-запросе русских символов. C Веб-службой общаюсь через TIdHTTP. Все настройки выставил правильно. Авторизация проходит успешно. Но когда пытаюсь отправить запрос в теле которого содержится кирилица, снифер показывает что в POST идут ????????.
Отправлял через TStringList
Код: pascal
1.
IdHttp.Post(HTTP_WWW, SL, MS)


Настройки компонента перед отправкой:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
IdHttp.Request.Connection = 'keep-alive';
IdHttp.Request.Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
IdHttp.Request.ProtocolVersion = pv1_1;
IdHttp.Request.ContentType = 'text/xml;charset=UTF-8';
IdHttp.Request.Charset = 'UTF-8';
IdHttp.Request.ContentLength = Length(SOAP_BODY);
IdHttp.Request.CustomHeaders.Clear;
IdHttp.Request.CustomHeaders.Add(SOAP_ACTION);


Перелазив разные вопросы по данной теме, попробовал поменять StringList на StringStream. Теперь сниффер показывает что вместо русских символов и ???? приходят в тело запроса циферки /316/342 и т.д. Вроде как мне кажется так кодируется UTF-8, но тем не менее сама веб-служба отвечает мне что не хочу я таких символов, давай мне нормальный русский язык. Всю голову сломал. Подскажите как можно это победить? Delphi XE.
...
Рейтинг: 0 / 0
02.08.2019, 10:04
    #39844455
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
А само тело запроса кто кодировать из Unicode в UTF-8 кто будет?
...
Рейтинг: 0 / 0
02.08.2019, 11:11
    #39844500
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Cobalt747, дык через StringStream пробовал так создать
Код: pascal
1.
2.
SL := TStingStream.Create('', TEncoding.UTF8);
SL := WriteString(SOAP_BODY);



И все равно...
...
Рейтинг: 0 / 0
02.08.2019, 11:17
    #39844508
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
IdHttp.Request.ContentEncoding := 'UTF-8' в снифере выдает ошибку распознавания тела запроса
...
Рейтинг: 0 / 0
02.08.2019, 11:26
    #39844514
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
И SL.WriteString(UTF8Encode(SOAP_Body)) не работает
...
Рейтинг: 0 / 0
02.08.2019, 11:33
    #39844519
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13И SL.WriteString(UTF8Encode(SOAP_Body)) не работает
ошибка какая?
инди какой версии?
на 9ке я только указывал
http.Request.ContentLanguage := 'utf-8';
больше нигде
...
Рейтинг: 0 / 0
02.08.2019, 11:38
    #39844523
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
wolverin, Indy 10.5.7. Ну попробую сейчас указать ContentLanguage
...
Рейтинг: 0 / 0
02.08.2019, 11:42
    #39844525
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13,

тело запроса естественно кодирую Utf8Encode, правда не все, а только саму кириллицу.
...
Рейтинг: 0 / 0
02.08.2019, 11:42
    #39844526
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
wolverin, не помогает ContentLanguage. Хотя в запросе показывает русские символы в виде \567\554\342\.... Это ж вроде правильно должно быть... Блин. Странно...
...
Рейтинг: 0 / 0
02.08.2019, 11:44
    #39844527
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13IdHttp.Request.ContentLength = Length(SOAP_BODY);

без этого разве не работает? имхо вообще не инициализировать лишнее.
...
Рейтинг: 0 / 0
02.08.2019, 11:45
    #39844528
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
wolverin, ХЗ, в описании службы грит надо в заголовке размер указать
...
Рейтинг: 0 / 0
02.08.2019, 11:46
    #39844530
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13,

мало ли, но может после енкода в утф он другой длины?
...
Рейтинг: 0 / 0
02.08.2019, 11:55
    #39844536
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
wolverin, убрал длину, не помогает...
...
Рейтинг: 0 / 0
02.08.2019, 12:01
    #39844542
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13,

закодируйте отдельно только кирилицу и посмотрите запрос как выглядит
...
Рейтинг: 0 / 0
02.08.2019, 12:03
    #39844545
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13wolverin, ХЗ, в описании службы грит надо в заголовке размер указать
Это компонент САМ всё делает, не мешай ему!


Код: pascal
1.
2.
3.
4.
5.
    if Assigned(ARequest.Source) then begin
      ARequest.ContentLength := ARequest.Source.Size;
    end else begin
      ARequest.ContentLength := -1;
    end;
...
Рейтинг: 0 / 0
02.08.2019, 15:28
    #39844675
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Ну убрал я размер, а толку. Без кирилицы запрос нормально проходит, это я уже пробовал. Там в таком запросе можно либо по цифрам вытягивать данные либо по ФИО. Вот по цифрам получается, а по ФИО нет
...
Рейтинг: 0 / 0
02.08.2019, 16:05
    #39844696
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13Cobalt747, дык через StringStream пробовал так создать
Код: pascal
1.
2.
SL := TStingStream.Create('', TEncoding.UTF8);
SL := WriteString(SOAP_BODY);



И все равно...
код отправки показывай.
...
Рейтинг: 0 / 0
02.08.2019, 16:47
    #39844718
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Чем thttprio не устраивает?
...
Рейтинг: 0 / 0
02.08.2019, 20:12
    #39844819
wolverin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
dartveider13Без кирилицы запрос нормально проходит, это я уже пробовал
да не кирилицу убрать предлагаю, а енкодить только ее, а не весь запрос целиком.
...
Рейтинг: 0 / 0
03.08.2019, 16:00
    #39844952
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
wolverindartveider13Без кирилицы запрос нормально проходит, это я уже пробовал
да не кирилицу убрать предлагаю, а енкодить только ее, а не весь запрос целиком.
/лицоладонь
...
Рейтинг: 0 / 0
05.08.2019, 05:29
    #39845224
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
HTTPRio не устраивает тем, что сама по себе служба написана не мной и она кривовата в плане ответов от нее. WSDL тоже кривой у нее.
...
Рейтинг: 0 / 0
05.08.2019, 05:41
    #39845226
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
// Процедура отправки запроса
var
 SOAP_Action, SOAP_Body: String;
begin
...
MS := TMemoryStream.Create;
SS := TStringStream.Create('', TEncoding.UTF8);
try
 SS.WriteString(SOAP_Body);
 
 IdHTTP.Request.Connection := 'keep_alive';
 IdHTTP.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
 IdHTTP.Request.UserAgent := 'Mozilla/3.0 (compatible;Indy Library)';
 IdHTTP.ProtocolVersion := pv1_1;
 IdHTTP.Request.ContentType := 'text/xml; charset=UTF-8';
 IdHTTP.Request.ContentLanguage := 'UTF-8';
 IdHTTP.Request.CustomHeaders.Clear;
 IdHTTP.Request.CustomHeaders.Add(SOAP_Action);
 IdHTTP.Post(HTTP_WWW, SS, MS);
 // как то так
finally
 FreeAndNil(SS);
 FreeAbdBil(MS);
end;
...
Рейтинг: 0 / 0
05.08.2019, 06:51
    #39845232
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Посмотрел онлайн конвертером hex-кодов в символы utf-8. Ну не те коды получаются. У меня начинается с кодов xce xe2, а должно быть xd0 xbe
...
Рейтинг: 0 / 0
05.08.2019, 07:55
    #39845247
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кирилица в SOAP-запросе
Емае)))) Вобщем сам дурак называется! Все хорошо. Код рабочий. Оказалось я неправильно другой параметр выставлял))) Там в запросе был тег TZ (типа тип запроса) и он у меня по копипасте был ZPT. Это для цифрового запроса, а надо было написать ZPL. Вобщем невнимательность и копипаста))) Всем спасибо за участие.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Кирилица в SOAP-запросе / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]