Имя: Пароль:
1C
1С v8
POST запрос к порталу
0 Mankubus
 
10.12.14
14:40
Здрасьте!

имеем описание:
Взаимодействие  клиента  с  Порталом  осуществляется  по  протоколу HTTPS  в соответствии со схемой «запрос – ответ».  
Запрос  клиента  к  Порталу  выполняется  методом POST,  необходимые  данные передаются в параметрах POST-запроса.
Запросы к Порталу должны направляться на следующий адрес:
https://ssl.croinform.ru:450/api

код:
АдресСервиса = "ssl.croinform.ru";
АдресРесурса = "/api.test";
СтрокаПараметров = "&Type=Login&Login=testAutomatUser&Password=testAutomatUser";
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
//ssl = Новый ЗащищенноеСоединениеOpenSSL(
//                Новый СертификатКлиентаWindows(
//                                СпособВыбораСертификатаWindows.Выбирать),
//                Новый СертификатыУдостоверяющихЦентровWindows());
                
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса + СтрокаПараметров,ЗаголовокHTTP);
HTTPСоединение = Новый HTTPСоединение(АдресСервиса,450,,,,,);
Попытка
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
    Сообщить("Ошибка при отправке запроса: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

в исключение не падает, но fiddler сообщает:
[Fiddler] ReadResponse() failed: The server did not return a response for this request. Server returned 0 bytes.

что не так?
1 zva
 
10.12.14
14:52
HTTPСоединение = Новый HTTPСоединение(АдресСервиса,450,,,,,);
Там последний параметр Истина должен быть, что соединение защищенное (https)
2 Поpyчик-4
 
10.12.14
15:00
(0)  Параметры POST-запроса надо отправлять по другому.
3 Garykom
 
гуру
10.12.14
15:03
(0) у поста не заголовок, у него тело, в отличие от гета

т.е. параметры в тело засунь
4 Mankubus
 
10.12.14
15:51
(1) там не Истина, а
ЗащищенноеСоединение (SecureConnection)
Использование:

Только чтение.
Описание:

Тип: ЗащищенноеСоединениеOpenSSL; ЗащищенноеСоединениеNSS; Неопределено.
Содержит объект защищенного соединения для осуществления HTTPS соединения, если указан.

если передавать в этот параметр:
ssl = Новый ЗащищенноеСоединениеOpenSSL(
                Новый СертификатКлиентаWindows(
                                СпособВыбораСертификатаWindows.Выбирать),
                Новый СертификатыУдостоверяющихЦентровWindows());

, то получаю ошибку
HTTPS handshake to ssl.croinform.ru failed. System.Security.Authentication.AuthenticationException Ошибка вызова SSPI, см. внутреннее исключение. < Предоставленные пакету учетные данные не были распознаны
5 Mankubus
 
10.12.14
15:52
(2) , (3) сделал, но ошибка та же. вот код:
Соединение = Новый HTTPСоединение("ssl.croinform.ru",450,,,,,);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
Запрос = Новый HTTPЗапрос("/api.test",ЗаголовокHTTP);
Запрос.УстановитьТелоИзСтроки("&Type=Login&Login=testAutomatUser&Password=testAutomatUser");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");
6 oleg_km
 
10.12.14
15:55
Запрос.УстановитьТелоИзСтроки("&Type=Login&Login=testAutomatUser&Password=testAutomatUser");

Первый & не нужен

там не Истина, а
ЗащищенноеСоединение (SecureConnection)

ну так установи этот параметр, а то судя по всему SSL не работает
7 Mankubus
 
10.12.14
16:05
(6) код:
ssl = Новый ЗащищенноеСоединениеOpenSSL(
                Новый СертификатКлиентаWindows(
                                СпособВыбораСертификатаWindows.Выбирать),
                Новый СертификатыУдостоверяющихЦентровWindows());

Соединение = Новый HTTPСоединение("ssl.croinform.ru",450,,,,,ssl);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
Запрос = Новый HTTPЗапрос("/api.test",ЗаголовокHTTP);
Запрос.УстановитьТелоИзСтроки("Type=Login&Login=testAutomatUser&Password=testAutomatUser");
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");

ошибка 1с:

{Форма.Форма.Форма(13)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
по причине:
Ошибка работы с Интернет:  Server returned nothing (no headers, no data)

ошибка fiddler:
fiddler.network.https> HTTPS handshake to ssl.croinform.ru failed. System.Security.Authentication.AuthenticationException Ошибка вызова SSPI, см. внутреннее исключение. < Предоставленные пакету учетные данные не были распознаны

что-то с сертификатом?
8 Mankubus
 
10.12.14
16:28
в параметр ssl передаю файлы сертификатов, теперь вот такая ошибка в логах:

19:25:18:3944 !SecureClientPipeDirect failed: System.Security.Authentication.AuthenticationException Ошибка вызова SSPI, см. внутреннее исключение. < Цепочка сертификатов выпущена центром сертификации, не имеющим доверия on pipe to (CN=ssl.croinform.ru, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com).
9 oleg_km
 
10.12.14
16:35
(9) попробуй без фидлера
10 ramir
 
10.12.14
17:30
Попробуй вот так
ssl = Новый ЗащищенноеСоединениеOpenSSL();
api яндекс директа кушает
11 Mankubus
 
11.12.14
08:17
(9) ничего не меняется
12 Mankubus
 
11.12.14
08:18
(10) не взлетает
Ошибка работы с Интернет:  Ошибка инициализации SSL-соединения
13 Поpyчик-4
 
11.12.14
10:16
(12) Это уже ошибка или платформы или на стороне сервера.
14 Поpyчик-4
 
11.12.14
10:20
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой