J'essaie d'accéder à l'API Text to Speech de Watson via une application Flash d'action script 3. Comme vous le savez, Adobe met en œuvre de nouvelles fonctions de sécurité pour restreindre l'accès à travers les domaines en utilisant un mécanisme qui utilise un fichier de configuration xml basé sur des règles (crossdomain.xml). Dans mon cas, l'erreur ci-dessous est déclenché lorsque le script est exécuté:Accès à l'API Watson à partir du script d'action adobe 3
code source:
package { import flash.net.URLRequest; import flash.net.URLRequestHeader; import flash.net.URLLoaderDataFormat; import flash.net.URLLoader; import flash.net.URLVariables; import flash.net.URLRequestMethod; import flash.events.Event; import flash.events.HTTPStatusEvent; import flash.events.SecurityErrorEvent; import flash.events.IOErrorEvent; public class Greeter { public function sayHello():String { var params:Object = {user:"John",password:"secret"}; var request:URLRequest = new URLRequest(); request.url = "https://watson-api-explorer.mybluemix.net/text-to-speech/api/v1/voices"; request.contentType = "application/json"; request.method = URLRequestMethod.POST; request.data = JSON.stringify(params); var contentTypeHeader:URLRequestHeader = new URLRequestHeader("Content-Type","application/json"); var acceptHeader:URLRequestHeader = new URLRequestHeader("Accept","application/json"); var formDataHeader:URLRequestHeader = new URLRequestHeader("Content-Type","application/json"); var authorizationHeader:URLRequestHeader = new URLRequestHeader("Authorization","Basic YjcxYWUwNTMtZTJmYi00ZmQzLWFiMTctOTRjYTc2MzYzYWE3OlZ5dU9VZ0w3ak1zVw=="); request.requestHeaders = [acceptHeader,formDataHeader,authorizationHeader,contentTypeHeader]; var postLoader:URLLoader = new URLLoader(); postLoader.dataFormat = URLLoaderDataFormat.BINARY; postLoader.addEventListener(Event.COMPLETE, loaderCompleteHandler); postLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); postLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); postLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); try { postLoader.load(request); } catch (error:Error) { trace("Unable to load post URL"); } var greeting:String; greeting = "Prueba de conexión a Watson!"; return JSON.stringify(request.data); } private function loaderCompleteHandler(event:Event):void { trace("loaderCompleteHandler: "); } private function httpStatusHandler(event:HTTPStatusEvent):void { trace("httpStatusHandler: "); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } } }
Sortie de la console:
[trace] Advertencia: Error al cargar el archivo de política desde https://watson-api-explorer.mybluemix.net/crossdomain.xml [trace] *** Violación de la seguridad Sandbox *** [trace] Se ha detenido la conexión con https://watson-api-explorer.mybluemix.net/text-to-speech/api/v1/voices - no se permite desde http://garragames.com/garra-x/Tick.swf [trace] 05:45:44 PM | err | [SecurityErrorEvent type="securityError" bubbles=false cancelable=false eventPhase=2 text="Error #2170: Security sandbox violation: http://garragames.com/garra-x/Tick.swf cannot send HTTP headers to https://watson-api-explorer.mybluemix.net/text-to-speech/api/v1/voices."] [trace] Error #2044: Unhandled securityError:. text=Error #2170: Security sandbox violation: http://garragames.com/garra-x/Tick.swf cannot send HTTP headers to https://watson-api-explorer.mybluemix.net/text-to-speech/api/v1/voices.
¿Exist une autre option pour accéder à l'API d'Action Script flash App?
** Option 1 **. Certains services ont en tête le modèle de sécurité Flash et fournissent les moyens d'utiliser leurs fonctionnalités. Lisez leur documentation ou contactez leur support. **Option 2**. Si vous n'avez pas besoin d'une application Web, utilisez AIR. Les applications de bureau/mobiles ont moins de restrictions. ** Option 3 **. Vous pouvez toujours recourir à votre application ** <-> ** Votre serveur ** <-> ** Leur modèle de service. – Organis
Affiche du code qui peut être testé pour recréer cette erreur. Peut-être que quelqu'un peut le réparer. –
@Garrapato, PHP est-il une option pour accéder aux données et passer à AS3? Votre erreur de sécurité est due au fait que votre site est 'http: //' mais vous essayez de charger le média depuis un site 'https: //'. Même si vous corrigez cela (en utilisant un serveur sécurisé/HTTPS), vous obtiendrez la vraie erreur en disant: 'L'en-tête d'autorisation n'est pas autorisé dans Actionscript'. Utilisez PHP ou Javascript et passez les données à AS3 via l'interface externe. –