Имя: Пароль:
1C
1C 7.7
v7: Интеграция с ПИК мосрег, непонятная кодировка кириллицы
0 serpentt
 
24.06.22
13:16
Здравствуйте, может кто-то занимался интеграцией с данным ресурсом?
Проблема в том, что полученный файл ответа(xml, вроде в кодировке utf-8), но вся кириллица значками и знаками вопроса.
В поддержке молчат.... Что это может быть?

вот пример:

<contractExecutions schemaVersion="1.0">
    <contractExecution>
        <id>2708269</id>
        <publishDate>2022-06-16T08:58:54.000Z</publishDate>
        <status>1</status>
        <type>3</type>
        <contractNumber>2042931</contractNumber>
        <contractExternalNumber>298751-21</contractExternalNumber>
        <contractCustomer>
            <type>1</type>
            <name>????N?N????°N?N?N????µ???????µ ?±N????¶?µN??????µ ??N???N??µN?N????????°?»N??????µ ???±N??°?·?????°N??µ?»N??????µ N?N?N??µ?¶???µ?????µ ????N???????N??????? ???±?»?°N?N??? A«??N?N???????N??????? N??µN???????N??? ????. ??.??. ??N????°???????°A»</name>
            <shortName>?????????? ???? A«??N?N???????N??????? N??µN???????N??? ????. ??.??. ??N????°???????°A»</shortName>
            <INN>5045002624</INN>
            <KPP>504501001</KPP>
1 serpentt
 
24.06.22
14:57
АПП
2 igork1966
 
24.06.22
16:53
Это уже поломанное. Тольку на него смотреть....
3 serpentt
 
24.06.22
16:58
(2) что значит поломанное? так сервер отдает
4 igork1966
 
24.06.22
17:03
(2) то что ты сюда вставил явно прошло какое-то преобразование
5 Волшебник
 
24.06.22
17:03
Знаки вопроса уже сигнализируют о том, что коды символов пропали и были заменены на вопросы.
Получите нормальный текст.
6 ДедМорроз
 
24.06.22
18:01
Сокранить полученный ответ в файл сразу в запросе,а после уже смотреть файл и думать.
7 big
 
24.06.22
18:15
(6) Просто схранить возможно не получится, ибо кодировка. Надо смотреть. Я у себя для таких ответов при сохранении перекодировку делаю.
7
Опять же - надо знать как ТС получает эту инфу? Каким способом, посредством какого инструмента?
8 ДедМорроз
 
24.06.22
19:36
(7) объект xmlhttprequest умеет возращать поток байт,который объект AdoDb.Stream умеет записать в файл.
9 serpentt
 
27.06.22
09:49
(7) получаю через СоздатьОбъект("WinHttp.WinHttpRequest.5.1") так-же устанавливаю рекомендованные(API) заголовки, но знаки вопроса остаются наместе
10 trad
 
27.06.22
10:16
(9) покажи код
11 serpentt
 
27.06.22
10:37
(10)
СписокHeader = СоздатьОбъект("СписокЗначений");
    СписокHeader.ДобавитьЗначение("1c77","User-Agent");
    СписокHeader.ДобавитьЗначение("Bearer "+real_token,"Authorization
СписокParam = СоздатьОбъект("СписокЗначений");
    СписокParam.ДобавитьЗначение(ДатаВФорматеISO8601(ДатаРазмещения) ,"lastStatusChangeDate");
ОтветHPPT = ОтправитьHTTPЗапрос("GET", "contractExecution/getContractExecutions", "XML",СписокHeader,СписокParam);


Функция ОтправитьHTTPЗапрос(metod, spase, shema="XML", RequestHeader, RequestParam="", TypDataRetern=0)
...

HTTPЗапрос.Option(2,"utf-8");
    HTTPЗапрос.Option(9,2048)

TextSend = "https://"+СокрЛП(server)+СокрЛП(server_API)+spase+ПолучитьПараметры(RequestParam);
    Сообщить(TextSend);
    HTTPЗапрос.Open(metod, TextSend,False);

Для Сч=1 По RequestHeader.РазмерСписка() Цикл
        НаимПараметр = "";
        ЗначПараметр = RequestHeader.ПолучитьЗначение(Сч,НаимПараметр);
        
        HTTPЗапрос.SetRequestHeader(НаимПараметр, ЗначПараметр);
    КонецЦикла;

HTTPЗапрос.Send();//ПолучитьСхему(shema)
    HTTPЗапрос.WaitForResponse();
    
    Если HTTPЗапрос.Status <> 200 Тогда
        Сообщить("Ошибка запроса авторизации: (" + HTTPЗапрос.Status + ") " + HTTPЗапрос.StatusText+РазделительСтрок+HTTPЗапрос.ResponseText(), "!!");
        Возврат "Error";
    Иначе
        Сообщить(HTTPЗапрос.Status);
    КонецЕсли;
    
    Результат          = HTTPЗапрос.ResponseText();

а дальше просто сохраняю РЕЗУЛЬТАТ как файл
12 trad
 
27.06.22
10:47
добавь заголовок
"Content-type", "application/xml; charset=utf-8"
13 serpentt
 
27.06.22
10:55
(12) нет все также Вот как ругается на открытие XML файла https://transfiles.ru/8633p

а в НотеПаде вообще определяет как еодировка ANSI https://transfiles.ru/92he4
14 arsik
 
гуру
27.06.22
10:59
(13) Ну у тебя вот тут все криво читается поди > Результат = HTTPЗапрос.ResponseText();
Тебе нужно результат HTTPЗапрос в бинарник сохранить методами HTTPЗапрос.
15 serpentt
 
27.06.22
11:01
(14) переделать на  xmlhttprequest responseXML
16 arsik
 
гуру
27.06.22
11:11
(15) Вот так попробуй
Ответ = HTTPЗапрос.responseStream;
Ответ.saveToFile(ПутьКФайлуОтвета);
17 serpentt
 
27.06.22
11:21
(16)
https://pik.mosreg.ru/v1.0/externalApi/contractExecution/getContractExecutions?lastStatusChangeDate=2022-06-10T23:59:59.000Z
200
Ответ = HTTPЗапрос.responseStream();
{E:\MILKOOPT\PIK_API\1C_ERT\PIK_WORCK.ERT(391)}: Тип переменой не поддерживается
18 serpentt
 
27.06.22
11:29
Всем спасибо все заработало через Stream.Write WinHttp.responseBody
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший