Имя: Пароль:
1C
1С v8
Ошибка 400 при работе с HTTPs соединением
0 Paradox
 
28.10.17
12:37
Добрый день!

Платформа: 8.3.10.2299.

До перехода на HTTPs, обращался к веб-сервису без проблем по HTTP соединению (авторизация доменная):

HTTP = Новый HTTPСоединение(ИмяСервера, Порт, , , , , , Истина);

Когда сделали HTTPs, то доделал строку соединения до вида:

HTTP = Новый HTTPСоединение(ИмяСервера, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL(), Истина);

Методы веб-сервиса и структура базы веб-сервиса не менялась. Просто администраторы сделали HTTPs.

Теперь при выполнении PUT-запроса получаю ошибку 400. Подскажите, пожалуйста, в чем может быть дело? Проблема на стороне веб-сервиса или я что-то не правильно указал в HTTPСоединении?

Текст ошибки:

Единицы измерения; {ВнешняяОбработка.ВыгрузкаВВебСервис.Форма.Форма.Форма(307)}: Ошибка выгрузки. Код ошибки: 400

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/stri... »»">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Verb</h2>
<hr><p>HTTP Error 400. The request verb is invalid.</p>
</BODY></HTML>
1 Филиал-msk
 
28.10.17
13:33
(0) > The request verb is invalid

Не надо в него PUT, не хочет он этого.
2 Paradox
 
28.10.17
14:33
(1) а ведь до этого (до перехода на HTTPs) именно PUT-запрос происходил из 1С в сервис и все отлично было.

К администратору надо обратиться?)
3 Филиал-msk
 
28.10.17
14:40
(2) Не знаю, что у вас там под веб-сервисом понимается, но SOAP, он какбе вообще-то POST подразумевает.

Пытай админов, почему типы запросов стали по разному обрабатываться. А то сейчас окажется что, например, перед аппликейшн сервером возник какой нить энджинх для поддержки SSL со своими представлениями о мире.
4 Paradox
 
28.10.17
14:46
(3) не совсем понимаю в веб-технологиях, но разработчики веб-сервиса сделали сервис не в 1С. Сказали выгружать данные в сервис PUT-запросами, а тело запроса в формате JSON.

До HTTPs, все отлично работало. Вчера перевели на защищенное соединение и пипец...походу надо копать именно сам сервис, что-то в нем случилось.
5 Paradox
 
28.10.17
14:50
(1) The request verb is invalid
Могу я судить по этому сообщению, что 1С устанавливает соединение защищенное и тут уже сам сервер, на котором поднят веб-сервис отвергает мой PUT-запрос?
6 Филиал-msk
 
28.10.17
15:56
(5) Да, SSL работает. Ты успешно попадаешь на веб сервер со свои непристойным предложением пута.
7 Филиал-msk
 
28.10.17
15:59
(4) Скорей всего одновременно с накатыванием SSL чтойто порубили во избежание или по недосмотру. Одмины могут.
8 sitex
 
naïve
28.10.17
17:02
(5)А вы точно тело в json отправляете ? попробуйте на этот сервис отправить PUT запрос  через Postman.
9 Филиал-msk
 
28.10.17
17:27
(8) Postman отстой, пользуйте Fiddler
10 sitex
 
naïve
28.10.17
17:29
(9) Аргументируй . Если не умеешь им пользоваться это не означает что продукт плох.
11 Paradox
 
28.10.17
17:46
по ссылке, которую предоставили разработчики веб-сервиса, открывается Swagger UI, где я могу сделать GET, PUT запросы.
Вот через этот интерфейс PUT нормально выполняется.
12 Филиал-msk
 
28.10.17
17:49
(10) Требует дрочки вприсядку при организации тестирования. Продукт плох.
13 sitex
 
naïve
28.10.17
17:49
(12) ну как я и думал аргумент весомый.
14 sitex
 
naïve
28.10.17
17:52
(11) Пробовали "WinHttp.WinHttpRequest.5.1" ?
15 Филиал-msk
 
28.10.17
17:52
(11) Интерфейс на https? Ты точно в нужный сервер попадаешь своим начальным CONNECT на https?
16 Paradox
 
28.10.17
17:54
(11) не пробовал
17 Филиал-msk
 
28.10.17
17:55
(13) А ты ценитель, однако.
18 Paradox
 
28.10.17
17:55
(12) это как понять? Я делаю в 1С, на HTTP работало без проблем. После перехода на HTTPs в коде добавил только объявление
Новый ЗащищенноеСоединениеOpenSSL()
19 sitex
 
naïve
28.10.17
17:57
(17) Фи Фи фи забыл добавить.
20 Филиал-msk
 
28.10.17
17:57
(16) Попробуй. Там дело в том, что при установке ssl сначала вылетает CONNECT, а твой PUT пойдет уже внутри канала. Если сервер CONNECT не ожидает, ты получишь такую же ошибку.
Вдруг он ждет SSL на 8443 каком нибудь.
21 Paradox
 
28.10.17
18:00
Вот сама процедура отправки запроса. Буду пробовать win http.

    ИмяСервера     = "*****";
    Порт         = 443;
    ИмяМетода     = "***" + ИмяМетода;
    
    HTTP = Новый HTTPСоединение(ИмяСервера, Порт, , , , , Новый ЗащищенноеСоединениеOpenSSL(), Истина);
    
    ЗаголовокЗапросаHTTP = Новый Соответствие();
    ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json-patch+json");
    ЗапросPUT = Новый HTTPЗапрос(ИмяМетода + "/" + РезультатЗапроса.Объекты.Guid1c, ЗаголовокЗапросаHTTP);
    
    
    ЗапросPUT.УстановитьИмяФайлаТела(ПутьКФайлу);
    Возврат HTTP.Записать(ЗапросPUT);
22 sitex
 
naïve
28.10.17
18:03
(20) Я думаю разрабы сообщили бы что у них запросы завернуты на другой порт.
23 sitex
 
naïve
28.10.17
18:11
(21) Как вариант вызвать на прямую HTTP.ВызватьHTTPМетод("PUT",ЗапросPUT);
24 Paradox
 
28.10.17
18:27
(23) Капец...заработало...в чем разница между Записать() и ВызватьHTTPМетод()

во втором случае работает, а в первом нет.
25 Paradox
 
28.10.17
18:28
(23) и при этом в "PUT " - надо обязательно пробел...
26 sitex
 
naïve
28.10.17
18:29
(24) Значит что то в 1 случае в заголовках сто то не то. сравните.
27 Paradox
 
28.10.17
18:31
(26) так заголовки такие же остаются...или что-то другое имеется ввиду?

ЗаголовокЗапросаHTTP = Новый Соответствие();
    ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json-patch+json");
28 sitex
 
naïve
28.10.17
18:34
(27) Вообще хорошо бы на стороне сервера узнать что в логах падает в первом случае. Спросите у разрабов. Может в 1 случае там вообще не PUT а что то другое.
29 sitex
 
naïve
28.10.17
18:38
(25) НА счет этого я задавал вопрос в поддержку , внятного ответа так и не получил в чем разница. Если кто знает в чем разница с пробелом или нет.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс