Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > КорДум

Оценить эту запись

Basic authentication и GET/POST запросы

Запись от КорДум размещена 20.03.2013 в 17:45
Обновил(-а) КорДум 24.03.2013 в 17:20

Послать GET/POST запрос на сервер из флеша проще простого. Во всяком случае это так кажется на первый взгляд. Я столкнулся с некоторыми нюансами, которые и хотел бы расписать тут. Авось кому пригодится.

1. Если сервер требует авторизацию, в каждый запрос необходимо поместить заголовок с этой самой авторизацией (что логично):
Код AS3:
private function getAuthHeader():URLRequestHeader {
	var auth:Base64Encoder = new Base64Encoder();
	auth.encode("login:pass");
 
	return new URLRequestHeader("Authorization", "Basic " + auth.toString());
}
Код AS3:
urlRquest.requestHeaders.push(getAuthHeader());
Естественно, метод выше можно дописать так, чтобы заголовок формировался только один раз и, если он сформирован, просто отдавать на него ссылку.
Здесь также стоит отметить, что Base64Encoder нужно подключать отдельно. Он живет в FlexSDK/frameworks/libs/framework.swc

2. Если сервер требует авторизацию, то ни один из методов GET работать не будет. Отсекание со статусом HTTP 401 гарантировано. Потому что:
Цитата:
Вследствие ограниченных возможностей обозревателей пользовательские заголовки запросов НТТР поддерживаются только для запросов POST, а для GET не поддерживаются.
3. Все запросы POST должны иметь непустой массив передаваемых параметров. Потому что:
Цитата:
Если в Flash Player указанная форма не имеет содержимого, проигрыватель автоматически использует операцию GET, даже если для метода установлено значение URLRequestMethod.POST. По этой причине рекомендуется всегда вставлять фиктивное содержимое, тем самым обеспечивая применение нужного метода.
А если запрос вдруг GET, то серверная авторизация не работает (см. п. 2)

В итоге после всего выше описанного мы имеем вот такой вот метод:
Код AS3:
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);
}
Где _host - url сервера, а foo - название вызываемого метода.

Вот и все.
Размещено в net
Комментарии 22 Отправить другу ссылку на эту запись
Всего комментариев 22

Комментарии

Старый 20.03.2013 22:49 dark256 вне форума
dark256
 
Аватар для dark256
На примере какого именно сервера возникло данное умозаключение?
Старый 20.03.2013 22:56 in4core вне форума
in4core
 
Аватар для in4core
Цитата:
На примере какого именно сервера возникло данное умозаключение?
Php скорее всего. Однако меня всегда веселит, когда, человек никогда не писавший серверные скрипты и вообще по факту глубоко не роющий в этом, говорит о Сервере как о чем-то сокравенном , таинственном. Собственно вот эта фраза
Цитата:
Послать GET/POST запрос на сервер
об этом и говорит. Сразу возникает вопрос, на какой сервер? что за сервер ? что под этим подразумевалось?
P.s. Саня это не про тебя, это я вообщем ))
Старый 20.03.2013 23:35 КорДум вне форума
КорДум
 
Аватар для КорДум
HTTP-запросы, почему обязательно php?
Цитата:
На примере какого именно сервера возникло данное умозаключение?
Заголовок здесь нужен для авторизации на уровне apache. Именно он отсекал неавторизованные запросы.
Старый 20.03.2013 23:48 alexcon314 вне форума
alexcon314
Речь идет о формировании запросов HTTP в клиенте - флеше. Как бы сервер тут не в тему. И потом, много вы видели HTTP-серверов (опять же), которые не поддерживают POST/GET?
И причем тут php? (серверный скрипт) != сервер.
Речь об отправке нужного запроса, а не о том, что с ним должен делать сервер, это вторично в данном контексте, если я все верно понял. Да и трудно не понять, когда в первой же строчке первыми словами .
Старый 20.03.2013 23:51 КорДум вне форума
КорДум
 
Аватар для КорДум
alexcon314, да, именно так =)
Старый 21.03.2013 00:01 GBee вне форума
GBee
 
Аватар для GBee
а в Опере вроде режется бейсик аут. По крайней мере полгода назад так было.
Старый 21.03.2013 00:03 dark256 вне форума
dark256
 
Аватар для dark256
Как я понял, данный рецепт применим для случая n-мерной лошади в гильбертовом пространстве. Взят узкий, вырожденный, специфически абстрактный частный случай умопомешат разработки коллектива интеллектуалов и диагноз история болезни попыток как-то это все же заставить работать была трансформирована в данный апокриф....
Крайне сомнительно, что где-то когда-то соберется еще один такой коллектив единомышленников, который, находясь в здравом уме и твердой памяти, воспроизведет описанное выше стечение обстоятельств и воспользуется приведенной панацеей
Старый 21.03.2013 00:06 КорДум вне форума
КорДум
 
Аватар для КорДум
Проверил, не режет.
Старый 21.03.2013 00:07 КорДум вне форума
КорДум
 
Аватар для КорДум
Дарк, ну кому надо отсылать запросы в защищенную зону, тот столкнется )
Старый 21.03.2013 21:43 alatar вне форума
alatar
 
Аватар для alatar
Если страница, содержащая флешку и сама флешка, находятся в той же защищенной зоне, то заголовок будет отправлен автоматически с каждым запросом.
Старый 22.03.2013 02:33 КорДум вне форума
КорДум
 
Аватар для КорДум
верное дополнение. Но пока отладка проходит локально, приходится насильно втыкать хидер.
Старый 22.03.2013 18:01 PainKiller вне форума
PainKiller
 
Аватар для PainKiller
А мне лично интересно что за авторизация? OAuth??
И лично я не понял эту строчку, что она делает, и зачем "loginass" кодировать в base64:
Код AS3:
auth.encode("login:pass");
Старый 22.03.2013 19:33 КорДум вне форума
КорДум
 
Аватар для КорДум
PainKiller,
Цитата:
А мне лично интересно что за авторизация?
Авторизация на уровне apache.

кодировать в Base64 нужно, потому что таков формат этого заголовка.
http://ru.wikipedia.org/wiki/%D0%A1%...%BE%D0%B2_HTTP
Старый 23.03.2013 06:19 alatar вне форума
alatar
 
Аватар для alatar
Basic access authentication
КорДум, для отладки можешь и в URL логин и пароль передавать.
Старый 23.03.2013 10:59 КорДум вне форума
КорДум
 
Аватар для КорДум
alatar, а, вот как еще можно. Спасибо.
Старый 23.03.2013 12:16 dark256 вне форума
dark256
 
Аватар для dark256
логин пасс в урле - это уж крайне пошло.......
в посте оно хоть не на виду....
а то что это за секьюрность.... имхо...
Старый 23.03.2013 12:21 КорДум вне форума
КорДум
 
Аватар для КорДум
Так для тестов же.
Старый 23.03.2013 17:50 alatar вне форума
alatar
 
Аватар для alatar
Цитата:
а то что это за секьюрность.... имхо...
Как бы...
Цитата:
The BA mechanism provides no confidentiality protection for the transmitted credentials. They are merely encoded with BASE64 in transit, but not encrypted or hashed in any way. Basic Authentication must be thus used over HTTPS in most cases.
Старый 24.03.2013 12:46 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
Однако меня всегда веселит, когда, человек никогда не писавший серверные скрипты и вообще по факту глубоко не роющий в этом, говорит о Сервере как о чем-то сокравенном , таинственном.
Это от человека, который недавно стейдж одним спрайтом заливал?
Цитата:
логин пасс в урле - это уж крайне пошло.......
в посте оно хоть не на виду....
а то что это за секьюрность.... имхо...
Исходить нужно из того, что человек который захочет ломать уж точно поглядит в POST/PUT. Который не захочет - его и в GET'e не засмущает.
Старый 24.03.2013 16:09 alatar вне форума
alatar
 
Аватар для alatar
Пост, кстати, стоило бы переименовать. Basic authentication вполне себе конкретная и стандартизированная вещь и не стоит описывать ее некими абстрактными понятиями. Речь ведь не идет об авторизации в общем.
Старый 03.01.2015 01:42 Tails вне форума
Tails
 
Аватар для Tails
Пробегался по интересным блогам автора, тут еще следует добавить, что браузерный флеш поддерживает только GET и POST запросы, про PUT и остальные забудьте. И еще нет никакой возможности управлять хедерами, те что высылает сервер.
Для многих это наверное давно не секрет, но указать в этой теме, считаю что стоит.
Старый 12.01.2015 09:52 nubideus вне форума
nubideus
Tails, но ведь браузерный флеш умеет сокеты
 

 


Часовой пояс GMT +4, время: 20:45.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.