|
Как отправить запрос к внешнему веб сервису | ☑ | ||
---|---|---|---|---|
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'. Заголовок надо было правильно передавать. Всем спасибо!) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |