Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3 can'中的URL请求;当服务器返回403时,无法读取正确的内容_Actionscript 3_Http Status Code 403_Urlrequest_Urlstream - Fatal编程技术网

Actionscript 3 AS3 can'中的URL请求;当服务器返回403时,无法读取正确的内容

Actionscript 3 AS3 can'中的URL请求;当服务器返回403时,无法读取正确的内容,actionscript-3,http-status-code-403,urlrequest,urlstream,Actionscript 3,Http Status Code 403,Urlrequest,Urlstream,我正在Flash客户端中使用URLRequest从服务获取一些信息,服务将检查请求url中的参数,如果参数无效,服务器可能返回403,其中包含http正文中的一些内容,我需要分析内容,内容是json字符串: {"code":3, "msg":"invalid channel"} 不幸的是,有时URLRequest无法从URLStream读取内容,stream.bytesavable为0,似乎URLStream读取空数据。 URL请求中是否存在任何错误?还是仅仅因为我用错了它 代码如下:

我正在Flash客户端中使用URLRequest从服务获取一些信息,服务将检查请求url中的参数,如果参数无效,服务器可能返回403,其中包含http正文中的一些内容,我需要分析内容,内容是json字符串:

{"code":3, "msg":"invalid channel"}
不幸的是,有时URLRequest无法从URLStream读取内容,stream.bytesavable为0,似乎URLStream读取空数据。 URL请求中是否存在任何错误?还是仅仅因为我用错了它

代码如下:

    public function test() {
        stream = new URLStream();
        request = new URLRequest(url);
        configureListeners(stream);
        var timer:Timer = new Timer(2000, 10);
        timer.addEventListener(TimerEvent.TIMER, onTimer);
        timer.start();
    }

    private function onTimer(e:TimerEvent):void {
        request.url = url + "&timestamp=" + getTimer();
        trace("try to load: " + request.url);
        stream.load(request);
    }

    private function configureListeners(dispatcher:EventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
    }

    private function completeHandler(event:Event):void {
        trace("completeHandler: " + event);
        parseHeader();
    }

    private function httpStatusHandler(event:HTTPStatusEvent):void {
        trace("httpStatusHandler: " + event);
    }

    private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event.toString());
        trace(stream.bytesAvailable + ", " + event.target.bytesAvailable + ", " + event.target.length);
    }
这是日志:

您可以通过唯一的URLStream实例每2秒请求10次数据。基本上,您可以在前一个请求完成之前发出另一个请求-这可能是多个错误的根源。我个人建议不要重用URLLoader、URLStream等实例。因此:1)等待一个操作完成(或失败),然后再请求下一个操作;2)不要重用URLStream实例,创建新的实例。您可以尝试查找响应头对象:
事件。响应头可能会在那里找到您的数据。这应该适用于AIR(监听
HTTP\u RESPONSE\u STATUS
,如果您确定它是一个应该有响应的状态代码,那么当您到达ioError处理程序时,它应该存在)。如果使用flash作为插件,它可能永远不会像您所希望的那样工作。对于非2xx响应代码,大多数在这种情况下使用flash的人都会返回一个200,并在响应中显示错误标志/消息。@谢谢,这只是一个测试演示,所以重用URLStream似乎不是那么完美——但这不是关键,即使在第一个需求中也是如此t、 我可以在浏览器中看到msg,但URLStream什么也看不到。所以我认为一定是出了什么问题。@BadfeelingAbout这也许你是对的,URLStream无法在非2xx响应中读取正确的内容。我问这个问题是为了找出根本原因:URLStream不支持这种情况,或者我不恰当地使用了它,或者是否存在这种情况任何更好的接口都可以满足这一需求。现在看来,URLStream导致了这个问题。因此,最好的解决方案可能是将响应代码更改为200。您通过唯一的URLStream实例每2秒请求数据10次。基本上,您可以在前一个请求完成之前发出另一个请求-这可能就是mu的根多个错误。我个人建议不要重用URLLoader、URLStream等实例。因此:1)在请求下一个操作之前等待一个操作完成(或失败),2)不要重用URLStream实例,创建新的响应头。您可以尝试查找响应头对象:
event.responseHeaders
-可能会在那里找到您的数据。这应该适用于AIR(侦听
HTTP\u response\u STATUS
,如果您确定它是一个应该有响应的状态代码,那么当您到达ioError处理程序时,它应该存在)。如果使用flash作为插件,它不可能像你所希望的那样工作。对于非2xx响应代码,大多数在这种情况下使用flash的人返回一个200,响应中有一个错误标志/消息。@谢谢,这只是一个测试演示,所以重用URLStream似乎不是那么完美——但这不是关键,即使在第一个请求中,我也可以在浏览器中看到消息,但URLStream没有读取任何内容。所以我认为一定是出了什么问题。@badfeelingabout这也许你是对的,URLStream无法在非2xx响应中读取正确的内容。我问这个问题是为了找出根本原因:URLStream不支持这种情况,或者我不恰当地使用它,或者是否有更好的接口来满足这种需求。现在看来,URLStream导致了这个问题。因此,最好的解决方案可能是将响应代码更改为200。