Имя: Пароль:
1C
 
Веб-сервис и Cookie
0 serezhka
 
19.06.18
12:26
Здравствуйте!
Борюсь с очередным веб-сервисом по поиску и заказу автозапчастей:
http://service.autopiter.ru/price.asmx?WSDL

Написал вот такой код:

URL = "http://service.autopiter.ru/price.asmx?WSDL";;
Определения = Новый WSОпределения(Строка(URL));
СервисWS    = Новый WSПрокси(Определения ,"http://www.autopiter.ru/","Price","PriceSoap";);
Authorization = СервисWS.Authorization("Логин","Пароль",true);
FindCatalog = СервисWS.FindCatalog("OC47");

На последней строчке выбивает ошибку:
Ошибка вызова операции сервиса:  {http://www.autopiter.ru/}:Price:FindCatalog()
по причине:
Ошибка SOAP сервера:  Превышено количество запросов к веб сервису. Вы блокированы на текущие сутки

Проблема с передачей куки-контейнера, а точнее в отсутствии этой передачи.

У них на сайте показан пример на ASP.NET:

// Создание куки контейнера, для
// передачи данных авторизации, не авторизованные пользователи не могут получить данные
// от функции: FindCatalog, GetPrice,GetPriceId

System.Net.CookieContainer cookCon = new CookieContainer();

//Создаем экземпляр класса прокси клиента, который использует SOAP протокол

WebReference.Price w = new WebApplication2.WebReference.Price();

//w.Url должен быть: "http://service.autopiter.ru/price.asmx";

//Устанавливаем куки-контейнер

w.CookieContainer = cookCon;
w.Timeout = 10000;

Как такое сделать в 1С, помогите кто разбирается?
1 Cyberhawk
 
19.06.18
12:28
Ничего такого в 1С нет. Только вручную сформированные ХТТП-заросы тебе помогут.
2 Cyberhawk
 
19.06.18
12:28
Веб-сервисы 1С - это тоже ХТТП-запросы, только формируемые и иногда частично проверяемыена валидность платформой
3 serezhka
 
19.06.18
12:33
(1) а случайно нету примера ХТТП-зароса с передачей кукиз?
4 VS-1976
 
19.06.18
12:33
HTTPСоединение + ( HTTPЗапрос + Заголовки.Вставить( "Cookie",  ) возможно прокатит
5 VS-1976
 
19.06.18
12:35
Примерно так:

пСоединение = Новый HTTPСоединение( URL, , , , , , Новый ЗащищенноеСоединениеOpenSSL() );

оHTTPЗапрос = Новый HTTPЗапрос( Адрес );
пЗаголовки    = оHTTPЗапрос.Заголовки;
пЗаголовки.Вставить( "Cookie", ТутКуки );

оHTTPОтвет = пСоединение.Получить( оHTTPЗапрос );
6 mistеr
 
19.06.18
12:44
(0) Зачем им куки, если аутентификация в каждом запросе?
7 Cyberhawk
 
19.06.18
12:45
(6) Видимо без куки любые запросы (хоть с логином-паролем, хоть без оного) бородятся из каких-нибудь соображений безопасности
8 Cyberhawk
 
19.06.18
12:45
(3) Нет, под рукой ничего такого нет
9 serezhka
 
20.06.18
15:14
Написал вот такой код, но тоже куки не работают почему-то:

        АдресСервиса = "http://service.autopiter.ru/price.asmx";;
        
        WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
        WinHttp.open("POST", АдресСервиса, 0);
        WinHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        WinHttp.setRequestHeader("Content-Length", СтрДлина(Запрос));      
        WinHttp.send(Запрос);
        Куки = WinHttp.getResponseHeader("Set-cookie");

    Запрос = "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:aut=""http://www.autopiter.ru/"">;
    |        <soapenv:Header/>
    |        <soapenv:Body>
    |        <aut:FindCatalog> <aut:ShortNumberDetail>"
    + "OC47" + "</aut:ShortNumberDetail>    
    |        </aut:FindCatalog>
    |        </soapenv:Body>
    |        </soapenv:Envelope>";

    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.open("POST", АдресСервиса, 0);
    WinHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    WinHttp.setRequestHeader("Content-Length", СтрДлина(Запрос));
    WinHttp.SetRequestHeader("Cookie", Куки);
    WinHttp.send(Запрос);

Может кто шарит в этом, помогите пожалуйста.
10 serezhka
 
20.06.18
15:17
(9) В переменную Куки записываются данные:
11 serezhka
 
20.06.18
15:18
(9) В переменную Куки записываются данные: AuthCoocies=010280AA0C12A7D6D508FE805A757F35EFD50801023200300000012F00FF; expires=Sat, 21-Jul-2018 18:12:19 GMT; path=/; HttpOnly