1

我有一个 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 执行此操作,而不必来回访问服务器)。谢谢。

编辑(2009 年 8 月 13 日)

我通过使用 UrlLoader 并在其上分配 2 个侦听器实现了一个简单的 UrlValidator。一个用于 IOError,另一个用于 Progress。我的想法是 Progress 的行为类似于 HEAD 调用,我可以在收到一些数据后终止流。不幸的是,在 404 或 403 的情况下调用了进度事件,这违背了目的。我也在 Open 事件中尝试过这个,但得到了相同的结果。有任何想法吗?

4

4 回答 4

1

Adobe 的 Flex 文档指出:“当您不通过基于服务器的代理服务时,您只能使用 HTTP GET 或 POST 方法。但是,当您将 useProxy 属性设置为 true 并使用基于服务器的代理服务时,您也可以使用 HTTP HEAD、OPTIONS、TRACE 和 DELETE 方法。”

基于服务器的代理服务是指 Live Cycle Data Services

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

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

于 2009-04-30T09:49:43.823 回答
0

每次我尝试在各种服务器上运行您的代码时,都会遇到策略错误,因此使用 Security.loadPolicyFile(url); 可能是个好主意。首先在尝试运行此代码之前?我正被赶出办公室,但我回家后会再看看这个:)

于 2009-04-23T22:17:11.307 回答
0

HEADservice.useProxy仅当设置为 时才受支持true。但service.useProxy指的HTTPProxyService是 BlazeDS/LCDS 中的。如果您只创建客户端应用程序,则需要设置service.useProxyfalse使用GETPOST

另一个问题是,如果您绕过HTTPProxyService,则必须满足以下至少一项:

  • URL 必须与您的 Flex 应用程序在同一个域中。
  • 必须在托管文档的 Web 服务器上安装crossdomain.xml(跨域策略)文件,以允许从应用程序的域进行访问。
于 2009-09-01T13:52:57.777 回答
-1

service.method = "头";

应该是“POST”或“GET”(默认是“GET”)而不是“HEAD”

service.useProxy = true;

没必要,去掉线...

如果 URL 可访问,您将收到一个 RESULT 事件。

于 2009-04-14T12:18:43.457 回答