Вход | Регистрация
 

Проблема с кодировкой текста получаемого из веб-сервиса

Проблема с кодировкой текста получаемого из веб-сервиса
Я
   mzelensky
 
05.02.20 - 08:49
Доброго времени суток!

Имеется некий сторонний http веб-сервис. В моем распоряжении только описание входных параметров и пример ответа. Методом "GET" через "HTTPСоединение" отправляю в него запрос. В ответ получаю "Код возврата = 200" (т.е. типа все ОК) и текст ответа следующего вида:

"�     M�1 �0�2)f�֭[�:�bk��lzxI �]��n� .��}𸗮&�'F��.t9@�6X��G��t�R�87�d�R�v�z�Fm(�o�{򖌪�����-�s���>�#���]��=�H�Z�:�>����E��   "

Перебирал различные кодировки в методе "РезультатHTTPЗапроса.ПолучитьТелоКакСтроку(КодировкаТекста)", но ничего вразумительного так и не увидел.
В заголовках запроса явно указано "HTTPЗаголовки.Вставить("charset", "utf-8");"

Если этот зе запрос послать через программу SoapUI, то ответ отображается абсолютно корректно (читабельно)

Вопрос - в чем косяк с получением данных через 1С-ку? Как добиться адекватного ответа со стороны веб-сервиса?
   ДенисЧ
 
1 - 05.02.20 - 08:50
сохрани в файл и посмотри побайтно.
   Кирпич
 
2 - 05.02.20 - 08:53
(1) да текст наверное 1с уже исковеркала. Смотри не смотри
   mzelensky
 
3 - 05.02.20 - 08:56
(1) и что мне это даст?
   ДенисЧ
 
4 - 05.02.20 - 08:57
(3) Тебе - ничего. Мне бы - дало.
   mzelensky
 
5 - 05.02.20 - 09:05
(4) Еще идеи есть?
   s_newbi
 
6 - 05.02.20 - 09:06
Минут через 40 у компа буду - напишу волшебную строк
   acht
 
7 - 05.02.20 - 09:09
(5) Продолжай перебирать кодировки.
   mzelensky
 
8 - 05.02.20 - 09:17
(7) Сдается мне - это тупиковый подход. Я уже пробовал через всяческие декодеры универсальные. Ни один не преобразовал в нужный вид - везде какая-то тарабарщина.

Я вот еще нечто подобное нашел, в этом дело быть не может:

https://webformyself.com/kodirovka-bazy-dannyx-mysql-vyvodim-iz-zapoya-pyushhie-bazy/comment-page-1/

???

Больше всего настораживает факт, что через SoapUI ведь все нормально работает!
   acht
 
9 - 05.02.20 - 09:18
(0) > В заголовках запроса явно указано "HTTPЗаголовки.Вставить("charset", "utf-8");" 

Выброси. Это указание кодировки тела запроса, который ты передаешь. А так как у тебя GET, то смысла в этом нет. Надо указывать "Accept-Charset: utf-8"
   acht
 
10 - 05.02.20 - 09:20
Ну и RAW view ответа в SoapUI многое тебе расскажет
   mzelensky
 
11 - 05.02.20 - 09:23
(9) Не помогло
   mzelensky
 
12 - 05.02.20 - 09:27
(10) Так я по нему и делаю. Вот RAW запроса, который я посылаю

GET [АдресРесурса]/?startDate=20200102&vinOfInterest=TT00068&endDate=20200131 HTTP/1.1
Accept-Encoding: gzip,deflate
Authorization: Bearer jQ1ZkWb4QkThpIaqk
Host: dataaccess.scania.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

Вот что приходит в формате JSon:

{
   "EvaluationStart": "20200102",
   "EvaluationEnd": "20200131",
   "TimeZone": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
   "MoreDataAvailable": "False",
   "VehicleList": []
}
   mzelensky
 
13 - 05.02.20 - 09:29
Вот RAW ответа:

HTTP/1.1 200 OK
Date: Wed, 05 Feb 2020 06:24:57 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: Kestrel
Content-Encoding: gzip
Vary: Accept-Encoding

{"EvaluationStart":"20200102","EvaluationEnd":"20200131","TimeZone":"(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna","MoreDataAvailable":"False","VehicleList":[]}
   acht
 
14 - 05.02.20 - 09:33
(12) Попробуй Accept-Encoding: identity

А вообще бери Fiddler, смотри, что ты посылаешь из 1С и проводи одно к другому.
   mzelensky
 
15 - 05.02.20 - 09:37
(14) ЕСТЬ!!!!!!!!!!!! Помогло:

"HTTPЗаголовки.Вставить("Accept-Encoding", "identity");"

Вот только почему, если даже в SoapUI указано:

"Accept-Encoding: gzip,deflate"

?
   acht
 
16 - 05.02.20 - 09:40
(15) Потому что SoapUI под капотом умеет разжимать gzip и deflate. Про что честно в этом заголовке и сообщает. Про что сообщает 1С по умолчанию - см Fiddler
   mzelensky
 
17 - 05.02.20 - 09:43
(16) Огромное спасибо! 2 дня мучений окончены
   ДенисЧ
 
18 - 05.02.20 - 09:46
"Вот RAW ответа: "
"Content-Encoding: gzip"

Я ж говорю - мне бы помогло )))
   s_newbi
 
19 - 05.02.20 - 09:51
У меня ответ тоже "нечитаемый" приходил, но 1с через чтениеjson разбирала корректно

ФайлРезультата = ПолучитьИмяВременногоФайла();
HTTPОтвет = HTTP.ОтправитьДляОбработки(запросPOST, ФайлРезультата);
ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
ОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
        
//разбираем ответ

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСервера);
Структура = ПрочитатьJSON(ЧтениеJSON);
   acht
 
20 - 05.02.20 - 09:55
(19) ЧтениеJSON.ОткрытьФайл для слабаков! (:
   mzelensky
 
21 - 05.02.20 - 10:24
(19) В моем случае код валился на "Структура = ПрочитатьJSON(ЧтениеJSON);".

Сейчас все нормально отрабатывает


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.