Форум программистов, компьютерный форум, киберфорум
1С: Администрирование и интеграция
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/193: Рейтинг темы: голосов - 193, средняя оценка - 4.59
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
1
1C 8.x

Кодировка utf-8 при отправке http запроса

28.01.2016, 12:29. Показов 34789. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день уважаемые формучане !!!
Возник вопрос прошу помощи у гуру ...

При подключении к системе ЕГАИС (1с УТ) на 2ух разных компютерах (2 разные ос) - разный результат отправки запросов.
на одном получает ответы от утм (универсального транспортного модуля).

На одном из компов сервер возвращает ошибку 500.
Перед отправкой запроса в коде 1с используется метод для формирования http запроса (точное название не помню) - в котором указывается кодировка utf-8.

до этого на этом же компютере (до переустановки ос) пытался отправлять запросы с помощью curl - через консоль - в ответ получал какуюто аброкадабру - после чего долго рылся в интернете и поменял что то со шрифтами ...
(сейчас как раз этот момент уже не припомню ... )
Эти пляски тогда в итоге помогли ...

В общем грешу на взаимодейсвие ОС со шрифтами и кодировкой utf-8 ...

Уважаемые гуру подскажите из опыта где В ос вин7 можно посмотреть правильно ли ос распознает кодировку utf-8? и как ее настроить ?

зы Понимаю что вопрос сыроват - очень плаваю в данном вопросе - попробовал изложить мои наблюдения ... надеюсь что кто нибудь меня поймет - по обрывочным сведениям ...

Заранее огромное спасибо !!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2016, 12:29
Ответы с готовыми решениями:

IOException при отправке http запроса
Есть данный чудо-код на java. Функция OpenConnection открывает подключение. Подключение - поле...

Виснет форма при отправке http запроса
На кнопку накинул этот код - System.Net.WebRequest reqGET =...

Кодировка при отправке json запроса в кириллице
Прошу помощи - отправляю post-запрос на сервер типа json-rpc. Текст запроса на кириллице,использую...

При отправке запроса ajax-ом нарушается кодировка символов кириллицы
Вот функция которая асинхронно отправляет серверу запрос к sourse_fail со строкой параметров param...

13
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
28.01.2016, 13:11 2
При создании тела запроса какую кодировку указываешь?
1
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
28.01.2016, 15:31  [ТС] 3
Volexovich Спасибо за отзывчивость !!! Уважение !!!
Цитата Сообщение от Volexovich Посмотреть сообщение
При создании тела запроса какую кодировку указываешь?
Я конечно ничего не указываю - это код написан разработчиками
1C
1
2
3
4
5
Попытка
        BOM=Неопределено;
        Выполнить("BOM=ИспользованиеByteOrderMark.НеИспользовать");
        HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, КодировкаТекста.UTF8, BOM);
    Исключение
причем ошибки не возникает
обратно УТМ (универсальный транспортный модуль) возвращает ошибку 500
1C
1
2
3
4
Соединение = Новый HTTPСоединение(ТранспортныйМодуль.АдресСервера, ТранспортныйМодуль.ПортСервера);
        HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
        
        РезультатВыполненияЗапроса.ОтветМодуляЕГАИС = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Текст ошибки не могу сейчас привести - но как я понял УТМ не смог разобрать шттп запрос ...

Вот такая борода ...

При этом при прочих равных - та же версия платформы и конфигурации и версии ос (но установочники ос были разными - сборки скорей всего какие то)- на другом компьютере ответ получает без проблем ...

В чем на ваш взгляд ошибочка ?

Заранее огромное спасибо !!!
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
28.01.2016, 15:43 4
Лучший ответ Сообщение было отмечено andrey76 как решение

Решение

Это уже известная особенность в 1с, когда вызывается HTTPЗапрос.УстановитьТелоИзСтроки(), создается временный файл и его первый символ это BOM.
Я обходил эту проблему по другому, указывал кодировку "CESU-8", она сама BOM откидывает.

А вообще не верю что зависит от ОС, зависит от типа запроса, если это пост, ошибка 500 если тело создавал 1с, разность срабатывание списываю на разные методы УстановитьТелоИзСтроки() и УстановитьТелоИзДвоичныхДанных().
1
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
28.01.2016, 16:10  [ТС] 5
Volexovich Спасибо за помощь братиш !!! Уважение !!! Ат души !!!

Хочу сказать перед тем как задавать вопросы что с http запросами знаком очень поверхностно - как раз читал про ответы сервера 500 400 итд и про версии протокола http ... К своему стыду ... И в 1с объект HTTPЗапрос встречаю первый раз (на программном уровне конечно ...). Понять всю эту тему быстро не смогу а доделать шабашку хотелось бы ...

Цитата Сообщение от Volexovich Посмотреть сообщение
Это уже известная особенность в 1с, когда вызывается HTTPЗапрос.УстановитьТелоИзСтроки(), создается временный файл и его первый символ это BOM.
Я обходил эту проблему по другому, указывал кодировку "CESU-8", она сама BOM откидывает.
на сколько я читал документацию по УТМ - он принимает и отправляет запросы в кодировки UTF8 ...
так же пытался изменить код на
1C
1
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, КодировкаТекста.ansi, BOM)
- была борода ...

вы думаете что если поменять кодировку на "CESU-8" код заработает ? Все же думаю что не так
так как (УТМ принимает и отправляет запросы в кодировки UTF8)

все же я не очень понял - как вы сказали что ошибка на стороне платформы и она не правильно кодирует запрос ... правильно я понял ?

почему же тогда на другой машине при прочих равных все сработало ровно ?

Заранее огромное спасибо !!!
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
29.01.2016, 12:56 6
Кодировка CESU-8 это и есть UTF-8 без BOM.

Цитата Сообщение от andrey76 Посмотреть сообщение
была борода ...
Конечно если УТМ требует UTF-8, а ему отправить другую кодировку, то будет ошибка.

Цитата Сообщение от andrey76 Посмотреть сообщение
почему же тогда на другой машине при прочих равных все сработало ровно ?
Кстати, на разных компьютерах версии платформы одинаковые? Может наконец 1с отказались от идеи при создании временного файла пихать в него BOM.

Добавлено через 9 минут
Цитата Сообщение от andrey76 Посмотреть сообщение
вы думаете что если поменять кодировку на "CESU-8" код заработает
Да
1C
1
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, "CESU-8")
1
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
29.01.2016, 14:13  [ТС] 7
Volexovich Ат души за помощь !!! Уважение !!!

Цитата Сообщение от Volexovich Посмотреть сообщение
Да
1CВыделить код
1
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, "CESU-8")
- Не братиш получилась та же самая борода ...
Цитата Сообщение от Volexovich Посмотреть сообщение
Конечно если УТМ требует UTF-8, а ему отправить другую кодировку, то будет ошибка.
Цитата Сообщение от Volexovich Посмотреть сообщение
Кстати, на разных компьютерах версии платформы одинаковые? Может наконец 1с отказались от идеи при создании временного файла пихать в него BOM.
- специально сделал абсолютно одинаковые...

Как я понял из прочитанног в иннете что проблема в том что 1с создает временные файлы с воом - то есть (как я понял с неким набором символов перед основным телом) ... И нужно от этих символов избавиться ... однако платформа на ее уровне все равно добавляет эти символы - поэтому Утм их не читает ...
- Вы к этому клоните ?

И все же понять не могу почему на одной ос - все нормально , а на другой борода ?
Версии платформы и конф одинаковые ...

У меня все же подозрения на то что ос записывает временный файл в кодировки анси ... Или такого быть не может ? я имею ввиду на уровне ОС ?


Заранее огромное спасибо !!!
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
29.01.2016, 16:03 8
Лучший ответ Сообщение было отмечено andrey76 как решение

Решение

Цитата Сообщение от andrey76 Посмотреть сообщение
Как я понял из прочитанног в иннете что проблема в том что 1с создает временные файлы с воом - то есть (как я понял с неким набором символов перед основным телом) ... И нужно от этих символов избавиться ... однако платформа на ее уровне все равно добавляет эти символы - поэтому Утм их не читает ...
- Вы к этому клоните ?
Да

Цитата Сообщение от andrey76 Посмотреть сообщение
У меня все же подозрения на то что ос записывает временный файл в кодировки анси ... Или такого быть не может ? я имею ввиду на уровне ОС ?
Это невозможно, при условии что вы указываете кодировку, но в 1с кодировка по молчанию utf-8

Цитата Сообщение от andrey76 Посмотреть сообщение
И все же понять не могу почему на одной ос - все нормально , а на другой борода ?
Что бы это выяснить необходимо перехватить временный файл который создается HTTPЗапрос.УстановитьТелоИзСтроки()

Добавлено через 3 минуты
Так какой код используешь при создании запроса?
Этот:
1C
1
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать)
1
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
29.01.2016, 16:06  [ТС] 9
Цитата Сообщение от Volexovich Посмотреть сообщение
Так какой код используешь при создании запроса?
Этот:
1CВыделить код
1
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, "UTF-8", ИспользованиеByteOrderMark.НеИспользовать)
нет вот этот

1C
1
2
3
4
5
Попытка
        BOM=Неопределено;
        Выполнить("BOM=ИспользованиеByteOrderMark.НеИспользовать");
        HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, КодировкаТекста.UTF8, BOM);
    Исключение
как я понял одно и тоже ... Все верно ?
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
29.01.2016, 16:31 10
Лучший ответ Сообщение было отмечено andrey76 как решение

Решение

Выложи кстати ответ сервера, тот что 500 сопровождает.

Добавлено через 1 минуту
Цитата Сообщение от andrey76 Посмотреть сообщение
как я понял одно и тоже ... Все верно ?
В принципе да, но писал тот кто любит лишний код.

Добавлено через 18 минут
А ОС какая на компе который не хочет отправлять?
1
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
29.01.2016, 16:42  [ТС] 11
Volexovich Спасибо что помогаешь Братиш !!! Ат души !!!

Цитата Сообщение от Volexovich Посмотреть сообщение
А ОС какая на компе который не хочет отправлять?
семерочка проф. А на другом (на котором все ок) семерочка макс.
уж очен не хочется ОС переставлять ...

Цитата Сообщение от Volexovich Посмотреть сообщение
Выложи кстати ответ сервера, тот что 500 сопровождает.
-
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /opt/in/QueryRests. Reason:
<pre>    Server Error</pre></p><h3>Caused by:</h3><pre>java.lang.RuntimeException: java.io.IOException: Incomplete parts
    at org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:500)
    at org.eclipse.jetty.server.Request.extractContentParameters(Request.java:417)
    at org.eclipse.jetty.server.Request.extractParameters(Request.java:363)
    at org.eclipse.jetty.server.Request.getParameterMap(Request.java:1003)
    at es.programador.http.ClientDocumentServlet.doPost(ClientDocumentServlet.java:77)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
    at org.eclipse.jetty.server.Server.handle(Server.java:517)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:306)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Incomplete parts
    at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:734)
    at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:405)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2311)
    at org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:495)
    ... 29 more
</pre>
<h3>Caused by:</h3><pre>java.io.IOException: Incomplete parts
    at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:734)
    at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:405)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2311)
    at org.eclipse.jetty.server.Request.extractMultipartParameters(Request.java:495)
    at org.eclipse.jetty.server.Request.extractContentParameters(Request.java:417)
    at org.eclipse.jetty.server.Request.extractParameters(Request.java:363)
    at org.eclipse.jetty.server.Request.getParameterMap(Request.java:1003)
    at es.programador.http.ClientDocumentServlet.doPost(ClientDocumentServlet.java:77)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119)
    at org.eclipse.jetty.server.Server.handle(Server.java:517)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:306)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
    at java.lang.Thread.run(Unknown Source)
</pre>
<hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.5.v20151012</a><hr/>
 
</body>
</html>
Подскажи братиш плиз в чем же трабл ???

Заранее огромное спасибо !!!
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
29.01.2016, 19:08 12
Цитата Сообщение от andrey76 Посмотреть сообщение
java.io.IOException
Ввод/вывод, а это с запросом проблема, перехвати файл запроса в момент создания и сравни с файлом который создается нормально.

Добавлено через 1 минуту
Incomplete parts
Вот это уже интересней, на кодировку он иначе ругаться должен. Тело запроса когда оно в файле надо смотреть однозначно.
1
8 / 8 / 0
Регистрация: 04.12.2012
Сообщений: 409
01.02.2016, 15:45  [ТС] 13
Добрый день Уважаемые форумчане !!!

Вот запрос который отправляет платформа

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
--a53a5df3e0474860982aa697715fce10
Content-Disposition: form-data; name="xml_file"
Content-Type: application/octet-stream
 
<ns:Documents xmlns:iab="http://fsrar.ru/WEGAIS/ActInventoryABInfo" xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" xmlns:pref="http://fsrar.ru/WEGAIS/ProductRef" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ns:Owner>
        <ns:FSRAR_ID>030000ххххх2</ns:FSRAR_ID>
    </ns:Owner>
    <ns:Document>
        <ns:QueryRests/>
    </ns:Document>
</ns:Documents>
--a53a5df3e0474860982aa697715fce10
--a53a5df3e0474860982aa697715fce10--
Вот какой он должен быть по мануалу

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?> 
<ns:Documents Version="1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" 
    xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters"> 
<!--Кто запрашивает документы--> <ns:Owner> 
<!--Идентификатор организации в ФС РАР--> (1.12.1) <ns:FSRAR_ID>00040218</ns:FSRAR_ID> 
</ns:Owner> <!--Запрос на остатки --> 
<ns:Document> <ns:QueryRests>
</ns:QueryRests> 
</ns:Document> 
</ns:Documents>
Как я понял ошибка не в запросе ... Поправьте если не так ...

В отладчике попробовал воспользваться методом
1C
1
HTTPЗапрос.ПолучитьИмяФайлаТела()
Получил неопределено

правлильно я понимаю что 1с не удается записать файл в какойто временный каталог?

И как на ваш взгляд - в чем ошибка ?


Заранее огромное спасибо !!!
0
208 / 182 / 31
Регистрация: 24.10.2011
Сообщений: 744
03.02.2016, 10:05 14
Цитата Сообщение от andrey76 Посмотреть сообщение
--a53a5df3e0474860982aa697715fce10
Это что такое и откуда?

Когда в отладчике пройдете строку УстановитьТелоИзСтроки(), зайдите в папку с временными файлами, найдите тот который создала 1с для этого запроса и любым HEX-редактором посмотрите его состав, убедитесь что первый символ не BOM, а структура файла соответствует требуемой.
1
03.02.2016, 10:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2016, 10:05
Помогаю со студенческими работами здесь

Кодировка при отправке
Добрый день! Возможно ли настроить Lotus так, чтобы тело письма исходящей SMTP почты (не вложение)...

Кодировка при отправке письма
Добрый день, подскажите как исправить корявую кодировку. Отправляю письмо с помощью компонента...

Кодировка при отправке письма
Добрый день, подскажите как исправить корявую кодировку. Отправляю письмо с помощью компонента...

Кодировка при отправке на почту
Вечер добрый, отправляю на почту письмо и летит кодировка! Я уже все перетыкал перепробовал (( &lt;?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru