Подключение сокета через прокси в ActionScript 3

1) Как мне подключиться через прокси, если я использую класс Socket для подключения к серверу?

2) Если я запускаю свое приложение Flex через Flash Player в веб-браузере, и мой веб-браузер настроен на использование прокси-сервера, выполняется ли подключение через сокет через прокси-сервер автоматически?

В идеале я хотел бы не зависеть от настроек веб-браузера и иметь возможность программно проксировать соединение из моего собственного кода. Поддерживая прокси напрямую, я могу скомпилировать его как настольное приложение AIR и по-прежнему поддерживать проксирование соединения. Кроме того, могут быть случаи, когда необходимо создать более одного сокетного соединения с разными прокси.

Использование сценария действий 3 в Flex Builder 3.

Спасибо.


person AaronLS    schedule 08.08.2009    source источник


Ответы (3)


Возможно, вы не сможете сделать это с ванильным классом Socket, но проверьте это сообщение Кристиана Кантрелла из Adobe (версия кэша Google) о специализированном классе сокетов, который он написал чтобы разрешить «подключения к сокету TCP через HTTP-прокси в соответствии с RFC 2817». Его класс с выигрышным названием RFC2817Socket.as (github), используется Open Flash Chart. Как отмечает Кристиан в своем посте, есть некоторые предостережения, и это может не сработать для вас, если ваш сервер не поддерживает RFC 2817 или если есть некоторые другие условия, которые не выполняются.

Обратите внимание, что в Windows Flash Player использует настройки прокси-сервера IE и игнорирует настройки используемого вами браузера.

person Vinay Sajip    schedule 17.08.2009
comment
Отлично, у меня получилось! Мне придется запустить какой-нибудь инструмент мониторинга сети, чтобы убедиться, что он действительно проходит через прокси-сервер, но, основываясь на исходном коде, я уверен, что это так. - person AaronLS; 17.08.2009
comment
К вашему сведению, я получил 400 Bad Request через один прокси-сервер, а затем попробовал другой, и все было хорошо. Так что, возможно, первый не поддерживал RFC 2817 или какая-то другая проблема. - person AaronLS; 17.08.2009

Я посмотрел, и кажется невозможным сделать именно то, что вы хотите сделать. Если у вас есть контроль над сервером, вы можете самостоятельно направлять запросы через сервер... и у Adobe есть примеры использования своих служб доступа к данным Flex (BlazeDS и LiveCycle) для прохождения через прокси. Опять же, если вы управляете своим собственным сервером, вы можете получить его через прокси в любом случае...

Но я боюсь, что, похоже, нет возможности напрямую установить прокси на стороне клиента с помощью ActionScript.

Что касается Flash в отношении прокси-сервера браузера, я не могу сказать, что знаю это из первых рук, но результаты поиска не очень хороши. Вот статья, в которой утверждается, что flash не будет использовать настройки прокси-сервера вашего браузера для SOCKS в Linux и предлагает вам изменить iptables. Существует также этот отчет об ошибке Adobe, предполагающий, что он не работает для соединений rtmp. по меньшей мере. Другие неофициальные данные свидетельствуют о том, что он работает иногда (для HTTP-запросов) для некоторых браузеров.

Поэтому, если вам нужно гарантировать, что соединение проходит через прокси, похоже, вам нужно направить свои запросы через сервер и прокси оттуда.

person James Fassett    schedule 08.08.2009

Вы не можете сделать это с помощью обычного прокси-сервера HTTP или SOCKS. Flex разделяет настройки подключения браузера. Но вы все равно можете обойти это, используя то, что они называют прокси-сервером PHP. веб-сайт, который загружает другие веб-сайты и пересылает результат вам.

person Havenard    schedule 17.08.2009
comment
Я не уверен, что это будет работать с подключением к сокету. Я не делаю запросы URL. Я использую сокет и делаю readInt и readBytes. - person AaronLS; 17.08.2009