Apache flex 对HttpService感到困惑';s useProxy(Flex 3)

Apache flex 对HttpService感到困惑';s useProxy(Flex 3),apache-flex,actionscript-3,actionscript,flex3,mxml,Apache Flex,Actionscript 3,Actionscript,Flex3,Mxml,我有一个flex应用程序,用户可以在其中提供指向资源的链接。我想执行一个简单的验证,并检查url是否实际有效(不仅仅是结构,而是实际测试链接,以确保我得到一个200 OK) 我想我只需要使用HttpService和HEAD方法,但似乎只有当您将useProxy设置为true时,这才可用,但我尝试了,但仍然出现错误;所以我很确定我做错了什么……下面是一段代码 var service:HTTPService = new HTTPService(); service.method = "HEAD";

我有一个flex应用程序,用户可以在其中提供指向资源的链接。我想执行一个简单的验证,并检查url是否实际有效(不仅仅是结构,而是实际测试链接,以确保我得到一个200 OK)

我想我只需要使用HttpService和HEAD方法,但似乎只有当您将useProxy设置为true时,这才可用,但我尝试了,但仍然出现错误;所以我很确定我做错了什么……下面是一段代码

var service:HTTPService = new HTTPService();
service.method = "HEAD"; 
service.url = url;
service.useProxy = true;
service.addEventListener(ResultEvent.RESULT, result);       
service.addEventListener(FaultEvent.FAULT, error);       
service.send();
知道我做错了什么吗?对于如何检查url是否有效,我也愿意接受其他建议(我更愿意直接从Flex执行此操作,而不必来回到服务器)。谢谢

编辑(8/13/2009)

我通过使用UrlLoader并在其上分配2个侦听器实现了一个简单的UrlValidator。一个表示IOError,另一个表示Progress。我的想法是,进程的行为类似于HEAD调用,我可以在接收到一定数量的数据后终止流。不幸的是,在404或403的情况下调用了progress事件,这与目的背道而驰。我也在公开赛上尝试过,但得到了同样的结果。有什么想法吗?

service.method=“HEAD”

应该是“POST”或“GET”(默认为“GET”),但不是“HEAD”

不需要,请删除该行


如果URL是可访问的,您将获得一个结果事件。

每次我尝试在各种服务器上运行代码时,都会出现策略错误,因此最好使用Security.loadPolicyFile(URL);在尝试运行此代码之前,是否先执行此操作?我被赶出了办公室,但我回家后会再看一遍:)

Adobe的Flex docs状态: 当您不使用基于服务器的代理服务时,只能使用HTTP GET或POST方法。但是,当您将useProxy属性设置为true并使用基于服务器的代理服务时,您还可以使用HTTP HEAD、OPTIONS、TRACE和DELETE方法

基于服务器的代理服务指的是生命周期数据服务

我知道AIR使用ServiceMonitor支持HEAD请求,但看起来Flex本身不支持


通过快速搜索,似乎有一些人已经使用套接字来滚动他们自己的自定义URLLoader类,这些类可以访问请求头-您可以尝试其中一个

仅当
服务.useProxy
设置为
时才受支持。但是
service.useProxy
指的是BlazeDS/LCD中的
HTTPProxyService
。如果仅创建客户端应用程序,则需要将
服务设置为
false
,并使用
GET
POST

另一个问题是,如果要绕过
HTTPProxyService
,则必须至少满足以下条件之一:

  • URL必须与Flex应用程序位于同一域中
  • 必须在承载允许从应用程序域访问的文档的web服务器上安装
    crossdomain.xml
    (跨域策略)文件

使用GET请求的问题是,它实际上会检索整个文件(或尝试检索)。这是不需要的,因为文件可能很大。我只是想看看它是否存在。。。我认为您可以使用URLLoader而不是HTTPService,并侦听打开事件和URLLoader发送的所有其他事件。当您使用close()方法获取打开事件时,您可以停止加载实际上,我认为这不起作用,因为我的swf嵌套在浏览器中,浏览器并不真正支持GET/POST以外的方法你说的“this”是什么意思?Security.loadPolicyFile在浏览器中运行良好。我这里不是100%确定,但我相信来自SWF的请求会通过浏览器,因此它们受到浏览器限制的限制。这些限制无法实际执行PUT/DELETE请求。因此,当在browser.Ohh中执行REST操作时,会出现黑客攻击。是的,然后我会尝试URLLoader.load(),然后在遇到httpResponseStatus事件时停止,我知道这并不理想,但会起作用。。。或者我仍然怀疑,如果调用Security.loadPolicyFile()也会提供您要查找的信息。对不起,我没有更多的帮助!我就是这么想的。不幸的是,您至少不能在没有跨域的站点上执行GET。或者允许您的应用程序通过签名绕过安全性(或者类似于java小程序的操作)
service.useProxy = true;