![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: May 2011
Сообщений: 5
|
Доброго времени суток, сообщество.
Ситуация следующая: есть web-сервис, при удачном обращении к нему выдается xml. Для обращения нужен логин и пароль. Пишу следующий код: import mx.rpc.soap.*; import mx.core.*; import mx.rpc.events.*; import fl.data.DataProvider; var myWebService = new WebService(); myWebService.addEventListener("load", loadDone); myWebService.setCredentials("WebService","Bru#t_a4T5-ok78"); myWebService.loadWSDL("http://62.76.65.113/ED/ws/WebPub.1cws?WSDL"); function loadDone(evt:LoadEvent) { myWebService.addEventListener(FaultEvent.FAULT, wsError); myWebService.addEventListener(ResultEvent.RESULT, wsResult); myWebService.send(); } function wsError(evt:FaultEvent) { MyLabel.text = "Error"; trace(evt.message.toString()); } function wsResult(evt:ResultEvent) { var xml:XML=XML(evt.result); var dp:DataProvider=new DataProvider(xml); MyLabel.text = "Success"; MyRes.dataProvider=dp; } Подскажите, как передать параметры авторизации в веб-сервис? Если ли другой метод авторизации (нашел http-авторизацию, но как работает не могу понять)? Буду признателен за помощь. Последний раз редактировалось queit; 10.05.2011 в 15:13. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Отредактируйте свой пост и оформите код тегами [as3][/as3].
|
|
|||||
|
Регистрация: May 2011
Сообщений: 5
|
(2) сделал
Отредактировал попробовал другой метод - "Базовая http-авторизация". Получилось следующее: import mx.rpc.soap.*; import mx.core.*; import mx.rpc.events.*; import fl.data.DataProvider; import mx.utils.Base64Encoder; var myWebService = new WebService(); //"http://svr-dist-01.nsaem.ru/ED/ws/WebPub.1cws?WSDL" myWebService.wsdl = "http://62.76.65.113/ED/ws/WebPub.1cws?WSDL"; myWebService.addEventListener("load", loadDone); var encoder:Base64Encoder = new Base64Encoder(); encoder.insertNewLines = false; encoder.encode("WebService:Bru#t_a4T5-ok78"); myWebService.httpHeaders = {AUTHORIZATION : "Basic " + encoder.toString()}; myWebService.loadWSDL(); function loadDone(evt:LoadEvent) { myWebService.addEventListener(FaultEvent.FAULT, wsError); myWebService.addEventListener(ResultEvent.RESULT, wsResult); myWebService.send(); } function wsError(evt:FaultEvent) { MyLabel.text = "Error"; trace(evt.message.toString()); } function wsResult(evt:ResultEvent) { var xml:XML=XML(evt.result); var dp:DataProvider=new DataProvider(xml); MyLabel.text = "Success"; MyRes.dataProvider=dp; } Error opening URL 'http://62.76.65.113/ED/ws/WebPub.1cws?WSDL' что бы это могло значить? как исправлять, не могу понять... Добавлено через 17 часов 4 минуты может какой-то прокси нужно использовать? подскажите, плиз... Последний раз редактировалось udaaff; 10.05.2011 в 16:04. |
|
|||||
|
Modus ponens
|
А без флексовых сервисов вы можете вообще туда законектится? Если IP настоящий, то сервиса такого либо вообще нет, либо с сервером проблемы... И, если чесно, я не уверен, как у флекса с basic авторизацией. Попробуйте просто URLLoader'ом послать запрос. Технически, вы почти все правильно сделали, только у URLLoader заголовки добавляются используя специальный класс URLRequestHeader (добавляется соотвественно к URLRequest, который вы посылаете).
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: May 2011
Сообщений: 5
|
спасибо что откликнулись и ответили ;-)
да, сервис доступен: если я в брайзере набираю http://62.76.65.113/ED/ws/WebPub.1cws?WSDL , а затем логин и пароль, то получаю xml-ку. Таким образом, с сервером проблем нет и IP-адрес нормальный (правильный, существующий и доступный). На счет basic авторизации у меня тоже большие сомнения. Сейчас попробую URLLoader'ом послать запрос, посмотрим что получится. |
|
|||||
|
Modus ponens
|
Мне этот сервис не отвечает. В смысле умирает по таймауту. traceroute говорит, что после выхода за пределы страны (местного провайдера), просто либо не может его найти / либо не существует такой вообще.
Может это у вас как-то так хитро настроена сетка и это какой-то внутренний IP? EDIT: А хотя нет... ip зарегистрирован где-то в Москве. Но в любом случае общаться с внешним миром не хочет ![]()
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 12.05.2011 в 13:47. |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: May 2011
Сообщений: 5
|
(6) я его вижу из своей подсети, вроде бы все нормально. все загружается. Возможно и сетка хитро настроена.
можно конечно попробовать совсем из-вне...возможно и не будет загружаться. я попробовал URLLoader.В общем, всё получается. Вот код: import flash.display.Sprite; import flash.events.*; import mx.rpc.events.*; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestHeader; import flash.net.URLRequestMethod; import flash.net.URLVariables; import mx.utils.Base64Encoder; var loader:URLLoader = new URLLoader(); var req:URLRequest=new URLRequest("http://62.76.65.113/ED/ws/WebPub.1cws?WSDL"); var headerRequests:Array=new Array(1); req.method=URLRequestMethod.POST; req.data = Math.random(); var encoder64:Base64Encoder = new Base64Encoder(); encoder64.encode("WebService:Bru#t_a4T5-ok78"); var credentials:String=encoder64.toString(); headerRequests[0]=new URLRequestHeader("Authorization","Basic "+credentials); req.requestHeaders=headerRequests; //loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS,onStatust); loader.addEventListener(Event.COMPLETE,this.onComplete); loader.addEventListener(IOErrorEvent.IO_ERROR,this.onError); loader.load(req); function onComplete(event:Event):void { trace("COMPLETE"); trace(event.target.data); } function onError(event:IOErrorEvent):void { trace("IO_ERROR"); trace(event.text); } 1. Строка меня очень смущает, при этом в результате этих действий формируемый запрос получается уникальным, и браузер не будет брать ответ из своего кэша. Вопрос в том: что можно ли как-нибудь красивее сделать чтобы каждый раз формировался новый запрос??? 2. Не могу сообразить, как сделать проверку доступности url? есть способ слушать HTTPStatusEvent.HTTP_RESPONSE_STATUS. как пользоваться не знаю...если подскажите, то буду очень признателен. Спасибо за ответы и поддержку. Особенное wvxvw :-) Добавлено через 38 секунд (7) Можете подробнее рассказать, желательно с примерчиком? |
|
|||||
|
Modus ponens
|
ping / traceroute
ну или GET. Но это конечно не стопроцентно даст ответ о существовании сервера, только о тогда, когда сервер желает отвечать на соответствующий вид запросов. А про ip всегда можно узнать с помощью всяческих сервисов типа whois / ip lookup.Что до рандомальных параметров в запросе - если сервис согласен принимать ту же самую информацию через POST - посылайте через POST, он не кешируется. Если нет - ну, тогда, боюсь что в общем случае никак. Некоторые особо находчивые браузеры просто даже запрос не пошлют, если он такой же, как предыдущий.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:15. |
|
|
« Предыдущая тема | Следующая тема » |
|
|