액션 스크립트 3 플래시 애플리케이션을 통해 왓슨 텍스트 to 스피치 API에 액세스하려고합니다. Adobe는 규칙 기반 XML 구성 파일 (crossdomain.xml)을 사용하는 메커니즘을 사용하여 도메인 간 액세스를 제한하는 새로운 보안 기능을 구현 한 것으로 알고 있습니다. 스크립트가 실행될 때 내 경우에는 아래의 오류가 발생합니다 :어도비 액션 스크립트 3의 왓슨 API 액세스
소스 코드 :
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); } } }
콘솔 출력 :
[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.
가 ¿ 액션 스크립트 플래시에서 API에 액세스 할 수있는 다른 옵션을 존재 앱?
** 옵션 1 **. 일부 서비스는 플래시 보안 모델을 염두에두고 기능을 사용하는 수단을 제공합니다. 해당 설명서를 읽거나 지원 부서에 문의하십시오. ** 옵션 2 **. 웹 기반 응용 프로그램이 아니더라도 AIR를 사용하십시오. 데스크톱/모바일 애플리케이션은 제한이 적습니다. ** 옵션 3 **. 언제든지 귀하의 앱에 의지 할 수 있습니다 ** <-> ** 귀하의 서버 ** <-> ** 그들의 서비스 모델. – Organis
이 오류를 다시 작성하기 위해 테스트 할 수있는 일부 코드를 표시하십시오. 어쩌면 누군가 그것을 고칠 수 있습니다. –
@Garrapato, PHP는 데이터에 액세스하고 AS3에 전달하는 옵션입니까? 보안 오류는 사이트가 'http : //'이지만 'https : //'사이트에서 미디어를로드하려고 시도했기 때문입니다. 그것 (보안/HTTPS 서버를 사용 함으로서)을 고치더라도, 당신은 실제 에러를 얻을 것입니다 :'인가 헤더는 Actionscript'에서 허용되지 않습니다. PHP 또는 자바 스크립트 중 하나를 사용하고 .. 외부 인터페이스를 통해 AS3에 내가 HTTPS 프로토콜을 테스트합니다 –