Basic authentication и GET/POST запросы
Послать GET/POST запрос на сервер из флеша проще простого. Во всяком случае это так кажется на первый взгляд. Я столкнулся с некоторыми нюансами, которые и хотел бы расписать тут. Авось кому пригодится.
1. Если сервер требует авторизацию, в каждый запрос необходимо поместить заголовок с этой самой авторизацией (что логично):
private function getAuthHeader():URLRequestHeader { var auth:Base64Encoder = new Base64Encoder(); auth.encode("login:pass"); return new URLRequestHeader("Authorization", "Basic " + auth.toString()); }
Здесь также стоит отметить, что Base64Encoder нужно подключать отдельно. Он живет в FlexSDK/frameworks/libs/framework.swc
2. Если сервер требует авторизацию, то ни один из методов GET работать не будет. Отсекание со статусом HTTP 401 гарантировано. Потому что:
Цитата:
Вследствие ограниченных возможностей обозревателей пользовательские заголовки запросов НТТР поддерживаются только для запросов POST, а для GET не поддерживаются.
Цитата:
Если в Flash Player указанная форма не имеет содержимого, проигрыватель автоматически использует операцию GET, даже если для метода установлено значение URLRequestMethod.POST. По этой причине рекомендуется всегда вставлять фиктивное содержимое, тем самым обеспечивая применение нужного метода.
В итоге после всего выше описанного мы имеем вот такой вот метод:
private function sendRequest(foo:String, params:URLVariables = null):void { var url:URLRequest = new URLRequest(_host + foo); url.requestHeaders.push(getAuthHeader()); url.method = URLRequestMethod.POST; if (params == null) { url.data = new URLVariables(); url.data["hack"] = 1; } else { url.data = params; } _loader.load(url); }
Вот и все.
Всего комментариев 22
Комментарии
![]() ![]() |
|
На примере какого именно сервера возникло данное умозаключение?
|
![]() ![]() |
|
alexcon314, да, именно так =)
|
![]() ![]() |
|
а в Опере вроде режется бейсик аут. По крайней мере полгода назад так было.
|
![]() ![]() |
|
Проверил, не режет.
|
![]() ![]() |
|
Дарк, ну кому надо отсылать запросы в защищенную зону, тот столкнется )
|
![]() ![]() |
|
Если страница, содержащая флешку и сама флешка, находятся в той же защищенной зоне, то заголовок будет отправлен автоматически с каждым запросом.
|
![]() ![]() |
|
верное дополнение. Но пока отладка проходит локально, приходится насильно втыкать хидер.
|
![]() ![]() |
|
![]() ![]() |
|
PainKiller,
Цитата:
А мне лично интересно что за авторизация?
кодировать в Base64 нужно, потому что таков формат этого заголовка. http://ru.wikipedia.org/wiki/%D0%A1%...%BE%D0%B2_HTTP |
![]() ![]() |
|
Basic access authentication
КорДум, для отладки можешь и в URL логин и пароль передавать. |
![]() ![]() |
|
alatar, а, вот как еще можно. Спасибо.
|
![]() ![]() |
|
логин пасс в урле - это уж крайне пошло.......
в посте оно хоть не на виду.... а то что это за секьюрность.... имхо... |
![]() ![]() |
|
Так для тестов же.
|
![]() ![]() |
|
Tails, но ведь браузерный флеш умеет сокеты
|
Последние записи от КорДум
- Basic authentication и GET/POST запросы (20.03.2013)
- SOAP и Flash (19.12.2012)
- Бинарные сокеты в AS3. Часть 3 (13.07.2012)
- Бинарные сокеты в AS3. Часть 2 (13.07.2012)
- Бинарные сокеты в AS3. Часть 1 (13.07.2012)