Flash не поддерживает имя пользователя / пароль в URL?Каковы мои альтернативы? - PullRequest
3 голосов
/ 13 октября 2011

Я пытался загрузить JSON из URL с именем пользователя / паролем в начале.

Таким образом, URL напоминает: http://username:password@www.myaddress.org.uk/api/profiles/

Я использую класс DataLoader из greensock, и он возвращает ошибку # 2032: Ошибка потока, если аутентификация включена, но загружается нормально, когда она отключена.

Я пытаюсь добавить URLRequestHeader 'Authorization', чтобы обойти эту проблему? Это лучший путь вперед?

Если это актуально, я занимаюсь разработкой с использованием FlashDevelop 4.0 / Flex SDK 4.5.1 на Windows 7 Enterprise.

Заранее спасибо!

Edit:

Я пытаюсь использовать заголовки аналогично этому сообщению: Flex 3 - как поддерживать HTTP-аутентификацию URLRequest? , но у меня нет особого успеха. Кодер base64, который я использую, отсюда: http://jpauclair.net/2010/01/09/base64-optimized-as3-lib/

2-е редактирование: последний код

_loader = new DataLoader(ENDPOINT, { onComplete:handleComplete, onError:handleError, onFail:handleFail } );

_loader.request.method = URLRequestMethod.POST;
_loader.request.data = new URLVariables("required=RandomData");

var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(USER+':'+PASS);
var headerString:String = Base64.encode(bytes);
var header:URLRequestHeader = new URLRequestHeader('Authorization', 'Basic ' + headerString );
_loader.request.requestHeaders.push(header);

_loader.load();

crossdomain.xml

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy 
  SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" />
   <allow-http-request-headers-from domain="*" headers="Authorization" />
</cross-domain-policy>

Редактировать 3 Я также пытался использовать URLLoader:

var urlRequest:URLRequest = new URLRequest(ENDPOINT);
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = new URLVariables("required=RandomData");

var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(USER+':'+PASS);
var headerString:String = Base64.encode(bytes);
var header:URLRequestHeader = new URLRequestHeader('Authorization', 'Basic ' + headerString );
urlRequest.requestHeaders.push(header);

_urlLoader = new URLLoader(urlRequest);
_urlLoader.addEventListener(Event.COMPLETE, temp_handleComplete);
_urlLoader.addEventListener(IOErrorEvent.IO_ERROR, temp_handleError);

1 Ответ

1 голос
/ 26 октября 2011

Обычная аутентификация во Flash довольно ограничена, особенно если вы хотите использовать API. Я бы предложил перенести запрос на ваш собственный сервер, где вы могли бы реализовать аутентификацию на основе сеансов или ключей.

Например. http://api.your -domain.co.uk / api / Profiles /? Key = 0123456789abdef вызовет серверный сценарий, который 1) проверяет правильность ключа API и 2) выбирает данные из http://username:password@www.myaddress.org.uk/api/profiles/ и возвращает его.

Если вы используете больше, чем "/ api / profile /" из API, я предлагаю написать переписывание, которое будет принимать любой путь и извлекать соответствующий удаленный путь. Сценарий может быть любым, поддерживаемым на вашем сервере, от сценария php до сценария bash.

Или, если ваше серверное приложение поддерживает его, вы даже можете использовать что-то вроде mod_proxy для настройки обратного прокси . На самом деле, теперь, когда я думаю об этом, обратный прокси, использующий Apache или Lighttpd, может быть самым простым решением! (См .: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...