AIR的URLLoader不支持对静态文件使用POST方法获取

在AIR中对静态文件使用POST方法获取内容的时候,会出现一个IOError错误:

[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://demo.zengrong.net/freeroom/index.html" errorID=2032]

注意,只有对 真正的纯静态文件 才会发生这样的错误,而对于使用URL重写方式虚拟出来的静态文件,则不会报错。(本文地址就是用UrlRewrite重写出来的,不信的可以试试 2013-01-24 本博客已经改为静态化地址了,请另找地方测试)

  • 对于以 file:/// 开头的本地文件,不会报错。
  • 在非AIR环境下,也完全正常,不会报错。

究其原因,可能是由于AIR对HTTP协议的方法实现得更加标准。因为AIR不仅支持POST和GET方法,还支持PUT和DELETE方法。 不了解PUT、DELETE、GET、POST的看这里

看下面的代码:

 1<?xml version="1.0" encoding="utf-8"?>
 2<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
 3                       xmlns:s="library://ns.adobe.com/flex/spark" 
 4                       xmlns:mx="library://ns.adobe.com/flex/mx"
 5                       applicationComplete="windowedapplication1_applicationCompleteHandler(event)">
 6<fx:Script>
 7    <![CDATA[
 8        import mx.events.FlexEvent;
 9
10        protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
11        {
12            _loader = new URLLoader();
13            _loader.addEventListener(Event.COMPLETE,handler_comp);
14            _loader.addEventListener(IOErrorEvent.IO_ERROR,handler_err);
15            var __request:URLRequest = new URLRequest('http://demo.zengrong.net/freeroom/index.html');
16            __request.method = URLRequestMethod.POST;
17            _loader.load(__request);
18        }
19        
20        private var _loader:URLLoader;
21        
22        private function handler_comp(evt:Event):void
23        {
24            trace(_loader.data);
25        }
26        
27        private function handler_err(evt:IOErrorEvent):void
28        {
29            trace(evt.toString());
30        }
31
32    ]]>
33</fx:Script>
34</s:WindowedApplication>