Имя: Пароль:
1C
1С v8
Как отправить запрос к внешнему веб сервису
0 Глеар
 
21.09.15
12:41
Уважаемые форумчане, прошу помочь разобраться с внешним веб сервисом. Вот его определение  - http://sample4.aplana.com/RseService/RseService.svc?wsdl
Я отправляю ему на обработку http запрос. что я должна указать в адресе сервера для http соединения(сейчас у меня стоит "sample4.aplana.com") и в адресе ресурса для http запроса (сейчас - "/RseService/RseService.svc/")? Как вообще из описания веб сервиса понять, что надо в эти параметры прописывать?


Текст запроса из примера ниже я вытащила из soapUI. Мне приходит в ответ код состояния = 415(Сервер не поддерживает указанный формат данных).  
/------------------------------------------------------/


Прокси = Новый ИнтернетПрокси;
HTTPЗапрос = Новый HTTPЗапрос;

АдресСервера = "sample4.aplana.com";
HTTPСоединение = Новый HTTPСоединение(АдресСервера,,,Прокси);

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "text/xml; charset=utf-8");
ЗаголовокHTTP.Вставить("Action", "Rse.API/IAuthorization/Login");

СтрокаXML = "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:rse=""Rse.API"">"  +
   "<soapenv:Header/>"  +
   "<soapenv:Body>"    +
      "<rse:Login>"    +
            "<rse:SessionData>"  +
            "<rse:Login>t</rse:Login>" +
            "<rse:Password>1</rse:Password>"  +
         "</rse:SessionData>" +
      "</rse:Login>" +
   "</soapenv:Body>"  +
"</soapenv:Envelope>";
        
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаXML);

Попытка

HTTPЗапрос.АдресРесурса =    "/RseService/RseService.svc/";
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос, ЗаголовокHTTP);
СтрокаХТМЛ = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Код = HTTPОтвет.КодСостояния;

    
Исключение
    
КонецПопытки;
1 Vladal
 
21.09.15
14:22
А какие функции у этого сервреа есть?
2 Zyka
 
21.09.15
14:23
http://sample4.aplana.com/RseService/RseService.svc?singleWsdl

sample4.aplana.com
RseService/RseService.svc?singleWsdl

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">;
    <Body>
        <Login xmlns="Rse.API">
            <SessionData>
                <Login>[string]</Login>
                <Password>[string]</Password>
                <DiagnosticMode>[string?]</DiagnosticMode>
            </SessionData>
        </Login>
    </Body>
</Envelope>
3 Vladal
 
21.09.15
14:23
Есть документация для этого веб-сервиса? Обращались в службу поддержки этой компании?
4 Zyka
 
21.09.15
14:23
BasicHttpBinding_IRseService:

AddWorklistEstimatedPayment
AddWorklistPayment
ApplyCarGate
ApplyComment
ApplyEvent
ApplyTestCar
ApplyUser
ApplyWorklist
CommitEvent
CommitWorklist
GetBuyCategories
GetCarBodyTypes
GetCarBrands
GetCarEngine
GetCarModels
GetCarPacking
GetCities
GetColorBody
GetColorInterior
GetFuelTypes
GetGearBoxTypes
GetInfoSources
GetLostReasons
GetUnassignedMarketingWorklists
GetUsers
GetWorklist
GetWorklistOffers
Login
Logout
SetAchievementsPlan
5 Zyka
 
21.09.15
14:25
P.S.
Адрес сервера: sample4.aplana.com
Адрес скрипта (wsdl): RseService/RseService.svc?singleWsdl
6 Мыш
 
21.09.15
14:32
(0) Открой для себя SoapUI
7 Defender aka LINN
 
21.09.15
14:33
Вообще для веб-сервисов в этой вашей 1С есть специально обученные объекты и методы
8 Глеар
 
21.09.15
15:01
(6) как раз сейчас открываю для себя SoapUI
(7) специально обученные объекты и методы не умеют работать с куками, к сожалению.

(5) Спасибо! Я не работала с веб сервисами и хотелось понять в правильном ли направлении я двигаюсь.
9 Злобний Мaльчик3
 
21.09.15
20:14
(8) SoapUI спасет мир. Страшно удобная штука.
10 Serginio1
 
22.09.15
11:15
11 Глеар
 
22.09.15
12:02
(10) Спасибо.
Я бы хотела все таки понять в чем причина того, что мне приходит в ответ код состояния 415. Это слегка раздражает, ведь в SoapUI запрос выполняется успешно. Подскажите, пож-та, что я делаю не так?


Прокси = Новый ИнтернетПрокси;
HTTPЗапрос = Новый HTTPЗапрос;
АдресСервера = "sample4.aplana.com";
    HTTPСоединение = Новый HTTPСоединение(АдресСервера,,,Прокси);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "text/xml; charset=utf-8");
ЗаголовокHTTP.Вставить("Action", "Rse.API/IAuthorization/Login");

    СтрокаXML = "<Envelope xmlns=""http://schemas.xmlsoap.org/soap/envelope/"">";+
    "<Body>"+
        "<Login xmlns=""Rse.API"">"+
            "<SessionData>"+
                "<Login>[email protected]</Login>"+
                "<Password>123456</Password>"+              
            "</SessionData>"+
        "</Login>"+
    "</Body>"+
    "</Envelope>";

СтрокаXML =  ЗаписатьXMLRSE(Login);
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаXML);

Попытка
HTTPЗапрос.АдресРесурса =    "RseService/RseService.svc?singleWsdl";
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос, ЗаголовокHTTP);
СтрокаХТМЛ = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Код = HTTPОтвет.КодСостояния;
            
Исключение
КонецПопытки;
12 Mankubus
 
22.09.15
12:05
а зачем использовать HTTPСоединение? может WSПрокси подойдет?
13 Serginio1
 
22.09.15
12:08
(11) Фиддлер в руки и сравнивай тело запросов
14 Глеар
 
22.09.15
12:19
(12) Когда я использую  http запрос, я получаю в ответ пакет с заголовком, из которого могу достать Cookie. И дальше отправлять серверу запросы вставляя куки в заголовок запроса. Всё это действо связано с тем, что сервер поддерживает авторизацию с помощью куков. Ранее, пока эти чудесные люди не включили авторизацию по кукам, я как раз использовала WS ссылку и все было просто супер!

(13)да сейчас открою Фиддлер и научусь им пользоваться, спасибо

Зачем вообще эти куки, все прекрасно без них работало, они что делают сайт нереально крутым?
15 Serginio1
 
22.09.15
12:22
(14) Через Куки передаются токены безопасности
16 Zyka
 
22.09.15
12:39
(11) Примите к сведению:
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаXML) - дописывает 3 лишних байта в тело POST-запроса.
~75% приемников воспринимают это адекватно, остальные - нет.

Выхода 2.

1.
UTF8_Bom = Новый ТекстовыйДокумент();
UTF8_Bom.ДобавитьСтроку(#ТекстЗапроса);
UTF8_Bom.Записать(#ФайлОтправки, "UTF-8");
Данные = Новый ДвоичныеДанные(#ФайлОтправки);
Строка64 = Base64Строка(Данные);
Строка64 = Прав(Строка64, СтрДлина(Строка64)-4);
ДанныеНаЗапись = Base64Значение(Строка64);
ДанныеНаЗапись.Записать(#ФайлОтправки);

2.
HTTPСоединение = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
17 Zyka
 
22.09.15
12:44
P.S.
"WinHttp.WinHttpRequest.5.1", только если у вас Шиндовс, разумеется.
18 Zyka
 
22.09.15
12:51
P.P.S.
Не 75%, а 15%*. Остальные вываляется с ошибкой парсинга.
19 Глеар
 
22.09.15
16:05
(16) Благодарю. Приму к сведению.

Фиддлер помог. Вот оно - 415 Cannot process the message because the content type 'application/octet-stream' was not the expected type 'text/xml; charset=utf-8'.
Заголовок надо было правильно передавать.

Всем спасибо!)