|
Проблема с кодировкой текста получаемого из веб-сервиса | ☑ | ||
---|---|---|---|---|
0
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с уже исковеркала. Смотри не смотри
|
|||
3
mzelensky
05.02.20
✎
08:56
|
(1) и что мне это даст?
|
|||
4
ДенисЧ
05.02.20
✎
08:57
|
(3) Тебе - ничего. Мне бы - дало.
|
|||
5
mzelensky
05.02.20
✎
09:05
|
(4) Еще идеи есть?
|
|||
6
s_newbi
05.02.20
✎
09:06
|
Минут через 40 у компа буду - напишу волшебную строк
|
|||
7
acht
05.02.20
✎
09:09
|
(5) Продолжай перебирать кодировки.
|
|||
8
mzelensky
05.02.20
✎
09:17
|
(7) Сдается мне - это тупиковый подход. Я уже пробовал через всяческие декодеры универсальные. Ни один не преобразовал в нужный вид - везде какая-то тарабарщина.
Я вот еще нечто подобное нашел, в этом дело быть не может: https://webformyself.com/kodirovka-bazy-dannyx-mysql-vyvodim-iz-zapoya-pyushhie-bazy/comment-page-1/ ??? Больше всего настораживает факт, что через SoapUI ведь все нормально работает! |
|||
9
acht
05.02.20
✎
09:18
|
(0) > В заголовках запроса явно указано "HTTPЗаголовки.Вставить("charset", "utf-8");"
Выброси. Это указание кодировки тела запроса, который ты передаешь. А так как у тебя GET, то смысла в этом нет. Надо указывать "Accept-Charset: utf-8" |
|||
10
acht
05.02.20
✎
09:20
|
Ну и RAW view ответа в SoapUI многое тебе расскажет
|
|||
11
mzelensky
05.02.20
✎
09:23
|
(9) Не помогло
|
|||
12
mzelensky
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": [] } |
|||
13
mzelensky
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":[]} |
|||
14
acht
05.02.20
✎
09:33
|
(12) Попробуй Accept-Encoding: identity
А вообще бери Fiddler, смотри, что ты посылаешь из 1С и проводи одно к другому. |
|||
15
mzelensky
05.02.20
✎
09:37
|
(14) ЕСТЬ!!!!!!!!!!!! Помогло:
"HTTPЗаголовки.Вставить("Accept-Encoding", "identity");" Вот только почему, если даже в SoapUI указано: "Accept-Encoding: gzip,deflate" ? |
|||
16
acht
05.02.20
✎
09:40
|
(15) Потому что SoapUI под капотом умеет разжимать gzip и deflate. Про что честно в этом заголовке и сообщает. Про что сообщает 1С по умолчанию - см Fiddler
|
|||
17
mzelensky
05.02.20
✎
09:43
|
(16) Огромное спасибо! 2 дня мучений окончены
|
|||
18
ДенисЧ
05.02.20
✎
09:46
|
"Вот RAW ответа: "
"Content-Encoding: gzip" Я ж говорю - мне бы помогло ))) |
|||
19
s_newbi
05.02.20
✎
09:51
|
У меня ответ тоже "нечитаемый" приходил, но 1с через чтениеjson разбирала корректно
ФайлРезультата = ПолучитьИмяВременногоФайла(); HTTPОтвет = HTTP.ОтправитьДляОбработки(запросPOST, ФайлРезультата); ТекстовыйФайлОтвет = Новый ТекстовыйДокумент; ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8); ОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст(); //разбираем ответ ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветСервера); Структура = ПрочитатьJSON(ЧтениеJSON); |
|||
20
acht
05.02.20
✎
09:55
|
(19) ЧтениеJSON.ОткрытьФайл для слабаков! (:
|
|||
21
mzelensky
05.02.20
✎
10:24
|
(19) В моем случае код валился на "Структура = ПрочитатьJSON(ЧтениеJSON);".
Сейчас все нормально отрабатывает |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |