|
v7: Руский текст с апи мдлп | ☑ | ||
---|---|---|---|---|
0
zummer99
16.08.21
✎
15:37
|
Проблема в следующем:
через апи отправляю файл по апи на мдлп. он принимается запрашиваю линк на квитанцию. получаю его. по линку получаю квитанцию. Но где русский текст знаки ?????? Вот код: ФайлКвит=СоздатьОбъект("Текст"); WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Open("GET", "https://api.mdlp.crpt.ru/api/v1/documents/"+ИД_док+"/ticket"); WinHttp.SetRequestHeader ("Authorization","token "+ токен); WinHttp.Send(); статус=WinHttp.Status; Если статус=200 Тогда Текст = WinHttp.ResponseText(); спТекст=глРазборJSON(Текст); СсылкаКвит=спТекст.ПолучитьЗначение(1,"спТекст") ; WinHttp.Open("GET", СсылкаКвит); WinHttp.SetRequestHeader ("Authorization","token "+ токен); WinHttp.Send(); Текст = WinHttp.ResponseText(); ФайлКвит.ДобавитьСтроку(Текст); ФайлКвит.Записать(ВремКаталог+"квит.txt"); ИначеЕсли статус=401 Тогда Сообщить("Устаревший токен, сформируйте новый"); КонецЕсли; Например, часть полученной строки с помощью этого кода <operation_comment>?§?°N?N???N??????µ ?·?°???µN?N??µ?????µ</operation_comment> Если тоже самое выполнить в плагине RestMan. Видим туже строку <operation_comment>Частичное завершение</operation_comment> Подскажите, в чем проблема? |
|||
1
ДенисЧ
16.08.21
✎
15:38
|
Уникод он такой...
|
|||
2
zummer99
16.08.21
✎
15:42
|
Так, это решаемо?
|
|||
3
Guk
16.08.21
✎
15:42
|
(0) дарю...
Функция ПреобразоватьСтрокуИзУТФ8(Стр) script = createobject("scriptcontrol"); script.language = "jscript"; script.addcode ( " |function ToANSI(v) |{ |v = v.split(""\\u0"").join(""%u0""); |return unescape(v) ; |} |"); возврат script.run("ToANSI", стр); КонецФункции |
|||
4
zummer99
16.08.21
✎
16:04
|
Спасибо
Но не помогло (((( Вот строка обработанная скриптом <operation_comment>?§?°N?N???N??????µ ?·?°???µN?N??µ?????µ</operation_comment> |
|||
5
zummer99
16.08.21
✎
16:04
|
Т.е. она не изменилась
|
|||
6
trad
16.08.21
✎
16:05
|
(0) WinHttp.setRequestHeader("Accept-Charset", "windows-1251");
|
|||
7
zummer99
16.08.21
✎
18:00
|
Это тоже не помогло
Берем в notepad++ пишем Частичное завершение. По умолчанию кодировка UTF-8 Преобразуем в windows-1251 и видим Частичное завершение Но у меня принимает ?§?°N?N???N??????µ ?·?°???µN?N??µ?????µ |
|||
8
trad
16.08.21
✎
19:54
|
Проверь, в заголовках, какой чарсет сервер возвращает
|
|||
9
zummer99
16.08.21
✎
19:57
|
Вот начало текста <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
|||
10
trad
16.08.21
✎
20:04
|
я про http заголовки
|
|||
11
zummer99
16.08.21
✎
20:12
|
Тогда подскажите где посмотреть
|
|||
12
dmitryds
16.08.21
✎
20:49
|
(0) А этот файл тоже Вами отправлялся?
ну и еще поставить себе в браузер расширение для rest api и посмотреть что там возвращается |
|||
13
zummer99
16.08.21
✎
21:41
|
Если глянуть в мое первое сообщение, то я никаких файлов не отправлял. И там же, RestMan возвращает руские буквы корректно
Что касаемо http заголовков Если заглянуть в код страницы RestMan, то в начеле видим <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>RestMan</title> <link rel="stylesheet" href="./css/foundation-5.4.6.css" /> <link rel="stylesheet" href="./css/codemirror-5.3/codemirror.css"> <link rel="stylesheet" href="./css/codemirror-5.3/monokai.css"> <link rel="stylesheet" href="./css/ui/expandable.css"> <link rel="stylesheet" href="./css/ui/history.css"> <link rel="stylesheet" href="./css/icomoon.css"> <link rel="stylesheet" href="./css/restman.css"> <link rel="stylesheet" href="./css/restman-dark.css"> </head> Вы про эти заголовки? |
|||
14
trad
17.08.21
✎
10:54
|
нет, не про эти
|
|||
15
Garykom
гуру
17.08.21
✎
11:01
|
тяжко с узкими 1Сниками
|
|||
16
zummer99
17.08.21
✎
11:10
|
Методичке по правилам общения по апи с мдлп для получения квитанции нужно вып. запрос
Пример из методички: GET api/v1/documents/97877d07-c949-4e98-9c26-49d9cb4d9fbd/ticket HTTP/1.1 Host: api.sb.mdlp.crpt.ru Accept: application/json Authorization: token 13b5b046-0cd7-4e1c-8409-da9541986d1c И далее ответ ссылка на квитацию { "link": "http://api.sb.mdlp.crpt.ru:80/webdav/upload/97877d07-c949-4e98- 9c26-49d9cb4d9fbd/ticket_97877d07-c949-4e98-9c26-49d9cb4d9fbd" } По этой ссылке и получаем текст, где русские буквы знаки ??????? |
|||
17
Garykom
гуру
17.08.21
✎
11:14
|
(16) эта ссылка отдельный от апи вебдав
возможно даже другой сервак логично что кодировка запросто своя так сложно выяснить какая кодировка и ее юзать? |
|||
18
zummer99
17.08.21
✎
11:19
|
5 сек. Щас поставлю firefox и гляну )))
|
|||
19
Garykom
гуру
17.08.21
✎
11:25
|
(18) curl лучше поставь
|
|||
20
Garykom
гуру
17.08.21
✎
11:26
|
(19)+ файрфокс тебе не поможет токен авторизации для скачивания по ссылке указать
|
|||
21
trad
17.08.21
✎
11:43
|
Чтобы владеть инструментом, надо хотя бы доку по винхттп глянуть и отличать хттп от хтмл
|
|||
22
zummer99
17.08.21
✎
11:48
|
Request URL: https://api.mdlp.crpt.ru/webdav/upload/4bcd6e8f-1376-4fa8-95fb-acbcd8f5da73/ticket_4bcd6e8f-1376-4fa8-95fb-acbcd8f5da73
Request Method: GET Status Code: 200 OK Remote Address: 78.142.221.73:443 Referrer Policy: strict-origin-when-cross-origin Accept-Ranges: bytes Connection: keep-alive Content-Length: 2453 Content-Type: application/octet-stream Date: Tue, 17 Aug 2021 08:44:39 GMT ETag: "611b749f-995" Last-Modified: Tue, 17 Aug 2021 08:34:39 GMT Server: nginx/1.14.0 Strict-Transport-Security: max-age=15768000 Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: ru,en;q=0.9 Authorization: token 306cc81c..........5e7d41a4a653 Connection: keep-alive Host: api.mdlp.crpt.ru sec-ch-ua: " Not;A Brand";v="99", "Yandex";v="91", "Chromium";v="91" sec-ch-ua-mobile: ?0 Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: none User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 YaBrowser/21.6.4.694 Yowser/2.5 Safari/537.36 |
|||
23
zummer99
17.08.21
✎
11:48
|
Кодировка, как я понимаю:
Content-Length: 2453 Content-Type: application/octet-stream |
|||
24
zummer99
17.08.21
✎
11:49
|
Или точнее Это
Accept-Encoding: gzip, deflate, br Accept-Language: ru,en;q=0.9 )))) |
|||
25
Garykom
гуру
17.08.21
✎
11:53
|
||||
26
Garykom
гуру
17.08.21
✎
11:54
|
У тебя бинарный поток, разбитый на октеты
|
|||
27
trad
17.08.21
✎
12:05
|
(22) это заголовки запроса
я предлагал глянуть в ответ сервера в (8) |
|||
28
zummer99
17.08.21
✎
13:34
|
trad, подскажите как посмотреть
В яндексе смотрю в Инструменте разработчика/Network Запускаю в рестман выполнение GET и вижу ответ окне Инструмента разработчика. И там только то, что я указал выше |
|||
29
zummer99
17.08.21
✎
13:45
|
Если выполнить команду WinHttp.getAllResponseHeaders() //Возвращает строку ответа сервера со всеми заголовками
то видим это "Connection: keep-aliveDate: Tue, 17 Aug 2021 10:38:02 GMTContent-Length: 2453Content-Type: application/octet-streamLast-Modified: Tue, 17 Aug 2021 08:34:39 GMTAccept-Ranges: bytesETag: "611b749f-995"Server: nginx/1.14.0Strict-Transport-Se" Тоже самое, что и показано выше Если выполнить эту команду WinHttp.responseBody() то Тип переменой не поддерживается Что еще посмотреть? |
|||
30
acht
17.08.21
✎
14:00
|
(0) Преобразуй кодировку через ADODB.Stream. Подробности - в гугле.
|
|||
31
trad
17.08.21
✎
14:39
|
(29) Да, я ошибся, в (22) действительно заголовки ответа
|
|||
32
trad
17.08.21
✎
15:00
|
судя по (9) в ответе xml документ
Тогда попробуй так: ФайлКвит=СоздатьОбъект("Текст"); WinHttp = СоздатьОбъект("Msxml2.ServerXMLHTTP"); // !!!!!!! <-- Другой объект WinHttp.Open("GET", "https://api.mdlp.crpt.ru/api/v1/documents/"+ИД_док+"/ticket"); WinHttp.SetRequestHeader ("Authorization","token "+ токен); WinHttp.Send(); статус=WinHttp.Status; Если статус=200 Тогда Текст = WinHttp.ResponseText(); спТекст=глРазборJSON(Текст); СсылкаКвит=спТекст.ПолучитьЗначение(1,"спТекст") ; WinHttp.Open("GET", СсылкаКвит); WinHttp.SetRequestHeader ("Authorization","token "+ токен); WinHttp.Send(); статус=WinHttp.Status; Если статус=200 Тогда ДокXML = Query.responseXML; // тут будет Msxml2.DOMDocument ДокXML.save(ВремКаталог+"квит.txt"); Иначе Сообщить("Ошибка " + статус); КонецЕсли; ИначеЕсли статус=401 Тогда Сообщить("Устаревший токен, сформируйте новый"); Иначе Сообщить("Ошибка " + статус); КонецЕсли; |
|||
33
trad
17.08.21
✎
15:01
|
документация по Msxml2.ServerXMLHTTP
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms754586(v=vs.85) документация по Msxml2.DOMDocument https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms757878(v=vs.85) |
|||
34
zummer99
17.08.21
✎
16:51
|
trad Спасибо
через Msxml2.ServerXMLHTTP и с помощью метода ResponseText русские буквы в строке стали отображаться правильно. Пробовал создать объект Msxml2.DOMDocument, но с ним ничего не получилось Где то на форуме взял этот код для перекодировки, т.к. текст возвращается в windows-1251, и документ xml стал открываться. Вот этот код: Байт=255; СтримВход=СоздатьОбъект("ADODB.Stream"); СтримВход.Type=2; СтримВход.charset="windows-1251"; СтримВход.Open(); СтримВход.LoadFromFile(ВремКаталог+"проба.txt"); СтримВыход=СоздатьОбъект("ADODB.Stream"); СтримВыход.Type=2; СтримВыход.charset="utf-8"; СтримВыход.LineSeparator=-1; СтримВыход.Open(); Всего=СтримВход.size; Пока СтримВход.EOS=0 Цикл СтримВыход.WriteText(СтримВход.ReadText(Байт),?(Байт=-2,1,0)); Состояние("" + Формат(100 * СтримВход.position/Всего,"Ч(0)5.2")+"%"); КонецЦикла; СтримВыход.SaveToFile(ВремКаталог+"проба.xml",2); |
|||
35
trad
17.08.21
✎
22:02
|
(34) домдокумент ведь будет в WinHttp.responseXML без всяких танцев со стрим
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |