2009-08-08 44 views
1

1)如果我使用Socket類連接到服務器,如何通過代理進行連接? 2)如果我通過Web瀏覽器中的Flash Player運行我的Flex應用程序,並且我的webbrowser被配置爲使用代理,套接字連接是否會自動通過代理?在ActionScript 3中通過代理連接套接字

理想情況下,我想不是必須依賴於網絡瀏覽器的設置,並且能夠以編程方式從我自己的代碼中代理連接。通過直接支持代理,我可以將其編譯爲桌面AIR應用程序,並仍支持代理連接。此外,可能會出現需要爲不同代理創建多個套接字連接的情況。

在Flex Builder 3

由於使用動作腳本3。

回答

6

您可能無法與香草Socket類要做到這一點,但檢查出this post by Christian Cantrell of AdobeGoogle cache version)約一個專門的Socket類,他寫道,讓「通過HTTP代理按照RFC 2817的TCP套接字連接」。開放閃存圖表使用His class, the winningly-named RFC2817Socket.asgithub)。正如Christian在他的文章中所說的,有一些注意事項,如果你的服務器不支持RFC 2817,或者某些其他條件不符合,它可能不適用於你。

請注意,在Windows上,Flash Player使用IE的代理設置並忽略您使用的實際瀏覽器的設置。

+0

太棒了,我懂了它的工作原理!我將不得不啓動一些網絡監控工具來驗證它是否真的通過代理,但基於源代碼,我相信它是。 – AaronLS 2009-08-17 17:33:58

+0

僅供參考,我通過一臺代理服務器收到了400個錯誤請求,然後嘗試了另一個,一切正常。所以可能是第一個不支持RFC 2817或其他一些問題。 – AaronLS 2009-08-17 17:35:08

2

我已經看了一眼,看起來不可能做到你想做的事。如果您擁有服務器的控制權,您可以通過自己的服務器路由請求......並且Adobe有examples of this using their Flex Data Access services(BlazeDS和LiveCycle)可以通過代理。然後再次,如果你控制自己的服務器,你可以得到它代理無論如何,你喜歡...

但我恐怕似乎沒有反正直接在客戶端使用ActionScript設置代理。

至於Flash尊重瀏覽器代理,我不能說我從第一手經驗知道,但搜索的證據不好。這裏有一篇文章,聲稱flash won't use your browsers proxy setting for SOCKS on Linux,並建議你需要改變你的iptables。這個adobe bug report也表明它至少不適用於rtmp連接。其他軼事證據表明它對某些瀏覽器有效有時(對於HTTP請求)。

因此,如果您需要保證連接通過代理,它看起來像您需要通過服務器和代理從您那裏路由您的請求。

0

你不能用普通的HTTP或SOCKS代理來做到這一點。 Flex共享瀏覽器的連接設置。 但是,您仍然可以通過使用他們所稱的PHP Proxy,基本上是一個下載另一個網站並將結果轉發給您的網站。

+0

我不確定這將適用於套接字連接。我沒有提出網址請求。我正在使用套接字並執行readInt和readBytes。 – AaronLS 2009-08-17 15:04:27

+0

那麼,一個原始的TCP連接...問題。但是,如果你使用HTTP ... – Havenard 2009-08-17 21:48:05