запутался по поводу useProxy HttpService (Flex 3) - PullRequest
1 голос
/ 14 апреля 2009

У меня есть гибкое приложение, в котором пользователь может предоставить ссылку на ресурс. Я хочу выполнить простую проверку и проверить, действительно ли 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, без необходимости возвращаться на сервер). Спасибо.

РЕДАКТИРОВАТЬ (13.08.2009)

Я реализовал простой UrlValidator, используя UrlLoader и назначив ему 2 слушателя. один для IOError, а другой для Progress. Я думал, что Progress будет действовать подобно вызову HEAD, и я мог просто убить поток после получения некоторого количества данных. К сожалению, событие прогресса вызывается в случае 404 или 403, что побеждает цель. Я также попробовал это с событием Open, но получил те же результаты. Есть идеи?

Ответы [ 4 ]

1 голос
/ 30 апреля 2009

Состояние Adobe Flex Flex: «Если вы не проходите через прокси-службу на сервере, вы можете использовать только методы HTTP GET или POST. Однако, если для свойства useProxy установлено значение true и вы используете прокси-службу на сервере, вы также можете использовать HTTP Методы HEAD, OPTIONS, TRACE и DELETE. "

Серверная прокси-служба ссылается на Live Cycle Data Services

Я знаю, что AIR поддерживает запросы HEAD с использованием ServiceMonitor, но похоже, что Flex сам по себе не поддерживает.

Имея быстрый поиск, кажется, что несколько человек использовали сокеты для прокрутки своих собственных пользовательских классов URLLoader, которые могут обращаться к заголовкам запросов - вы можете попробовать один из них

0 голосов
/ 01 сентября 2009

HEAD поддерживается только в том случае, если для service.useProxy установлено значение true. Но service.useProxy относится к HTTPProxyService в BlazeDS / LCDS. Если вы создаете только клиентское приложение, вам нужно установить service.useProxy на false и использовать либо GET, либо POST.

Другая проблема заключается в том, что если вы обходите HTTPProxyService, по крайней мере одно из следующего должно быть истинным:

  • URL-адрес должен находиться в том же домене, что и ваше Flex-приложение.
  • Файл crossdomain.xml (междоменная политика) должен быть установлен на веб-сервере, на котором размещен документ, разрешающий доступ из домена приложения.
0 голосов
/ 24 апреля 2009

Каждый раз, когда я пытаюсь запустить ваш код на разных серверах, я получаю ошибки политики, поэтому было бы неплохо использовать Security.loadPolicyFile (url); сначала, прежде чем пытаться запустить этот код? Меня выбрасывают из офиса, но я попытаюсь посмотреть на это снова, когда вернусь домой:)

0 голосов
/ 14 апреля 2009

service.method = "HEAD";

должно быть «POST» или «GET» (по умолчанию «GET»), но не «HEAD»

service.useProxy = true;

необязательно, уберите строку ...

если URL доступен, вы получите событие RESULT.

...