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
Комментарии
20.03.2013 22:49 | |
На примере какого именно сервера возникло данное умозаключение?
|
20.03.2013 23:51 | |
alexcon314, да, именно так =)
|
21.03.2013 00:01 | |
а в Опере вроде режется бейсик аут. По крайней мере полгода назад так было.
|
21.03.2013 00:06 | |
Проверил, не режет.
|
21.03.2013 00:07 | |
Дарк, ну кому надо отсылать запросы в защищенную зону, тот столкнется )
|
21.03.2013 21:43 | |
Если страница, содержащая флешку и сама флешка, находятся в той же защищенной зоне, то заголовок будет отправлен автоматически с каждым запросом.
|
22.03.2013 02:33 | |
верное дополнение. Но пока отладка проходит локально, приходится насильно втыкать хидер.
|
22.03.2013 18:01 | |
22.03.2013 19:33 | |
PainKiller,
Цитата:
А мне лично интересно что за авторизация?
кодировать в Base64 нужно, потому что таков формат этого заголовка. http://ru.wikipedia.org/wiki/%D0%A1%...%BE%D0%B2_HTTP |
23.03.2013 06:19 | |
Basic access authentication
КорДум, для отладки можешь и в URL логин и пароль передавать. |
23.03.2013 10:59 | |
alatar, а, вот как еще можно. Спасибо.
|
23.03.2013 12:16 | |
логин пасс в урле - это уж крайне пошло.......
в посте оно хоть не на виду.... а то что это за секьюрность.... имхо... |
23.03.2013 12:21 | |
Так для тестов же.
|
12.01.2015 09:52 | |
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)