Пример Flash-сокета HTTP-POST - PullRequest
       3

Пример Flash-сокета HTTP-POST

3 голосов
/ 30 сентября 2011

В этой статье приведен пример использования класса flash.net.Socket для подключения к сокету:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html

Пример внизу показывает, как использовать запрос HTTP-GET.

Мне нужно использовать запрос HTTP-POST.

Бонус: это работает с HTTPS-портом 443?

1 Ответ

2 голосов
/ 30 сентября 2011

Сокет не правильный класс для этой работы. Сокеты используются для работы с необработанными соединениями данных TCP. Например, вы бы использовали Socket для интеграции с пользовательским компонентом сервера, который использует собственный протокол связи.

Вместо этого используйте класс URLRequest для выполнения HTTP-запросов из flash / actionscript. Этот класс поддерживает POST, а также GET. Он также поддерживает HTTPS.

Здесь - пример выполнения запроса POST. (кстати, это первый результат, который дает Google, когда вы ищете "as3 post request" )

Есть также примеры, доступные в документации (ссылка выше) и в других местах в сети.


Редактировать: Чтобы извлечь двоичные потоковые данные с HTTP-сервера, вам следует использовать URLStream . Нечто подобное выполнит через POST-запрос:

private var stream:URLStream;
private var uploadData:ByteArray;

public function URLStreamExample() {
    stream = new URLStream();
    stream.addEventListener(ProgressEvent.PROGRESS, progressHandler);

    var request:URLRequest = new URLRequest("URLStreamExample.swf");
    request.method = URLRequestMethod.POST;

    // uploadData contains the data to send with the post request
    // set the proper content type for the data you're sending
    request.contentType = "application/octet-stream";
    request.data = uploadData;  

    // initiate the request
    stream.load(request);
}

private function progressHandler(event:Event):void {
    // called repeatedly as data arrives (just like Socket's progress event)

    // URLStream is an IDataInput (just like Socket)
    while( stream.bytesAvailable ) {
       var b:int = stream.readByte();
    }
}
...