Загрузка файлов политик с адреса https с помощью flex - PullRequest
0 голосов
/ 20 января 2011

Я испытываю огромные трудности, пытаясь получить результат от httprequest на адрес https. Я загружаю файл политики с адреса, но все еще получаю ошибку безопасности 2048.

Я загружаю свой файл политики, как это происходит в моем обработчике preinitilize.

private function preint(e:FlexEvent):void
            {
                Security.loadPolicyFile("https://api.soundcloud.com/crossdomain.xml");
            }

Мой сервер возвращает мне специальный токен, который мне нужен, и затем я пытаюсь сделать запрос к нужному ресурсу, используя urlrequest и urlloader.

private function getprivatetracks():void
        {
                var url:String=new String("https://api.soundcloud.com/me/tracks?oauth_token=" + testapplicationparameters["oauth_token"])
            var req:URLRequest=new URLRequest()
            req.contentType="application/x-www-form-urlencoded"
            req.method=URLRequestMethod.GET;
            req.url=url;

            var loader:URLLoader=new URLLoader()
            loader.dataFormat=URLLoaderDataFormat.TEXT;
            loader.dataFormat="text";
            loader.load(req);
            configureListeners(loader);


        }

Если я отследю URL-адрес, который я звоню, и вставлю его в браузер, я вижу результат в порядке. Это чисто флеш вещь. Когда я запускаю swf в режиме отладки из flex IDE, запрос работает нормально. Проблема возникает, только когда SWF находится на сервере.

Я провел большую часть дня, стуча головой, пытаясь понять это.

Может ли кто-нибудь подсказать, что я могу делать неправильно?

Полагаю, мне не хватает фундаментальных знаний о том, как flash работает с https.

РЕДАКТИРОВАТЬ 1

Error: Request for resource at https://api.soundcloud.com/me/tracks?oauth_token=0000000NBfKiNXEYG00FWTUGAy5Uw68r by requestor from http://myserver/content/flash/soundcloud/sclive.swf is denied due to lack of policy file permissions.

*** Security Sandbox Violation ***
Connection to https://api.soundcloud.com/me/tracks?oauth_token=0000000NBfKiNXEYG00FWTUGAy5Uw68r halted - not permitted from http://myserver/content/flash/soundcloud/sclive.swf
Error #2044: Unhandled securityError:. text=Error #2048: Security sandbox violation: http://myserver/content/flash/soundcloud/sclive.swf cannot load data from https://api.soundcloud.com/me/tracks?oauth_token=0000000NBfKiNXEYG00FWTUGAy5Uw68r.
    at sclive/getprivatetracks()[C:\flex_projects\sclive\src\sclive.mxml:74]
    at sclive/authorize_result_handler()[C:\flex_projects\sclive\src\sclive.mxml:62]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at HTTPOperation/http://www.adobe.com/2006/flex/mx/internal::dispatchRpcEvent()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\http\HTTPService.as:763]
    at mx.rpc::AbstractInvoker/http://www.adobe.com/2006/flex/mx/internal::resultHandler()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\AbstractInvoker.as:263]
    at mx.rpc::Responder/result()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\Responder.as:46]
    at mx.rpc::AsyncRequest/acknowledge()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\rpc\AsyncRequest.as:74]
    at DirectHTTPMessageResponder/completeHandler()[C:\autobuild\3.5.0\frameworks\projects\rpc\src\mx\messaging\channels\DirectHTTPChannel.as:409]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/onComplete()

РЕДАКТИРОВАТЬ 2

Я пытался перехватить событие ошибки безопасности и проверить URL, чтобы убедиться, что переадресация не происходит, но обработчик никогда не вызывается! Я всегда получаю ошибку неуправляемого исключения, даже если я написал обработчик для него.

1 Ответ

0 голосов
/ 20 января 2011

Из соображений безопасности не рекомендуется разрешать HTTP-контенту доступ к HTTPS-контенту. Поэтому, если soundcloud хочет разрешить HTTP-контенту доступ к своим данным, они должны указать его в своем файле crossdomain.xml (используя атрибут secure = "false" в теге allow-access-from).

Однако я только что заметил, что на http также есть междоменный домен: http://api.soundcloud.com/crossdomain.xml

Поэтому я предлагаю вам использовать этот URL вместо HTTPS, и он будет работать

...