|   |   | 
| 
 | Проблема с кодировкой текста получаемого из веб-сервиса | ☑ | ||
|---|---|---|---|---|
| 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);". 
 Сейчас все нормально отрабатывает | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |