亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java中的代理原理及代理使用示例

2019-11-26 15:16:21
字體:
來源:轉載
供稿:網友

今天再測試Socket編程時,無法連接外網。公司用的是Http的代理。上網搜索也沒看太懂,所以花了大量時間來學習??戳薍TTP和TCP協議的關系好,才有所明白。現在能通過Socket使用HTTP代理了,結果很簡單,過程卻好難。

1. 先簡要說說HTTP和TCP(具體內容自行Google,資料很多很全),這里就講講要點:

HTTP:是應用層協議,是基于傳輸層協議的。

TCP: 是傳輸層協議,是基于網絡層協議的。

IP: 是網絡層協議。

一個TCP的連接要進行三次握手(就像轉戶口一樣,不詳說),HTTP只是一個應用協議,也就是相當于一個自定義協議,即其沒有對底層的傳輸方式進行干涉,只是對數據內容格式進行了定義。打個比方,別人說“SB”(你的名字),你回答“是”,僅僅是內容格式,沒有改變聲音的傳輸方式(通過聲波傳送<網絡硬件介質>,通過雙方都能聽懂的語言<TCP/IP>)。同理,FTP, Telnet也是一種應用層協議,打個比方對于FTP,別人說“SB",你回答“哎”,只是格式內容不同而已。

2. 認識到以上之后,我們再說說HTTP代理,從上可以理解,HTTP代理服務器就是這樣一臺機器:你把所有的HTTP請求(不管是想請求百度還是Google)都發到這個HTTP代理服務器,然后這個HTTP代理服務器請求你要訪問的最終地址,把響應回傳給你。這里還要注意它代理的是HTTP協議,而HTTP又是基于TCP的,也就是說這個服務器代理的是指定HTTP內容格式的TCP連接。再說下去也沒意思了,看以下代碼:

復制代碼 代碼如下:

//以下地址是代理服務器的地址 
Socket socket = new Socket("10.1.2.188", 80); 
//寫與的內容就是遵循HTTP請求協議格式的內容,請求百度 
socket.getOutputStream().write(new String("GET http://www.baidu.com/ HTTP/1.1/r/n/r/n").getBytes()); 
byte[] bs = new byte[1024]; 
InputStream is = socket.getInputStream(); 
int i; 
while ((i = is.read(bs)) > 0) { 
    System.out.println(new String(bs, 0, i)); 

is.close(); 

當然在Java中,有Proxy代理上網的使用,此時使用URL(HTTP)就不涉及Socket(TCP)了,看如下代碼

復制代碼 代碼如下:

//設置代理 
System.setProperty("http.proxySet", "true"); 
System.setProperty("http.proxyHost", "10.1.2.188"); 
System.setProperty("http.proxyPort", "80"); 
 
//直接訪問目的地址 
URL url = new URL("http://www.baidu.com"); 
URLConnection con = url.openConnection(); 
InputStreamReader isr = new InputStreamReader(con.getInputStream()); 
char[] cs = new char[1024]; 
int i = 0; 
while ((i = isr.read(cs)) > 0) { 
    System.out.println(new String(cs, 0, i)); 

isr.close(); 

最后總結一下:

在使用HTTP代理的環境中,

如果使用Socket(TCP)連接外網,則直接連接代理服務器,然后在發送的HTTP請求中指明要轉發到的外網網址。

如果使用URL(HTTP)連接外網,則需要設置HTTP代理參數或使用Proxy。

 

OK,明白以后可以隨意使用了,看以下代碼,使用NIO的Socket通過HTTP代理訪問外網的例子:

復制代碼 代碼如下:

SocketChannel sc = SocketChannel.open(new InetSocketAddress("10.1.2.188", 80)); 
 
sc.write(Charset.forName("utf8").encode("GET http://www.baidu.com/ HTTP/1.1/r/n/r/n")); 
 
ByteBuffer buffer = ByteBuffer.allocate(1024); 
 
while (sc.read(buffer) != -1) { 
    buffer.flip(); 
    System.out.println(Charset.forName("utf8").decode(buffer)); 
    buffer.clear(); 

sc.close(); 

Java Socket編程中加入代理示例

有些時候我們的網絡不能直接連接到外網, 需要使用http或是https或是socket代理來連接到外網, 這里是java使用代理連接到外網的一些方法,:方法一使用系統屬性來完成代理設置, 這種方法比較簡單, 但是不能對單獨的連接來設置代理:

復制代碼 代碼如下:

    public static void main(String[] args) {
        Properties prop = System.getProperties();
        // 設置http訪問要使用的代理服務器的地址
        prop.setProperty("http.proxyHost", "192.168.0.254");
        // 設置http訪問要使用的代理服務器的端口
        prop.setProperty("http.proxyPort", "8080");
        // 設置不需要通過代理服務器訪問的主機,可以使用*通配符,多個地址用|分隔
        prop.setProperty("http.nonProxyHosts", "localhost|192.168.0.*");
        // 設置安全訪問使用的代理服務器地址與端口
        // 它沒有https.nonProxyHosts屬性,它按照http.nonProxyHosts 中設置的規則訪問
        prop.setProperty("https.proxyHost", "192.168.0.254");
        prop.setProperty("https.proxyPort", "443");
        // 使用ftp代理服務器的主機、端口以及不需要使用ftp代理服務器的主機
        prop.setProperty("ftp.proxyHost", "192.168.0.254");
        prop.setProperty("ftp.proxyPort", "2121");
        prop.setProperty("ftp.nonProxyHosts", "localhost|192.168.0.*");
        // socks代理服務器的地址與端口
        prop.setProperty("socksProxyHost", "192.168.0.254");
        prop.setProperty("socksProxyPort", "8000");
        // 設置登陸到代理服務器的用戶名和密碼
        Authenticator.setDefault(new MyAuthenticator("userName", "Password"));
    }
    static class MyAuthenticator extends Authenticator {
        private String user = "";
        private String password = "";
        public MyAuthenticator(String user, String password) {
            this.user = user;
            this.password = password;
        }
        protected PasswordAuthentication getPasswordAuthentication() {
            returnnew PasswordAuthentication(user, password.toCharArray());
        }
    }

方法二使用Proxy來對每個連接實現代理, 這種方法只能在jdk 1.5以上的版本使用(包含jdk1.5), 優點是可以單獨的設置每個連接的代理, 缺點是設置比較麻煩:
復制代碼 代碼如下:

    public static void main(String[] args) {
        try {
            URL url = new URL("http://www.baidu.com");
            // 創建代理服務器
            InetSocketAddress addr = new InetSocketAddress("192.168.0.254",
                    8080);
            // Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Socket 代理
            Proxy proxy = new Proxy(Proxy.Type.HTTP, addr); // http 代理
            // 如果我們知道代理server的名字, 可以直接使用
            // 結束
            URLConnection conn = url.openConnection(proxy);
            InputStream in = conn.getInputStream();
            // InputStream in = url.openStream();
            String s = IOUtils.toString(in);
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线免费观看| 欧美色道久久88综合亚洲精品| 日韩一区二区福利| 日韩一区二区精品视频| 亚洲性生活视频在线观看| 国产精品久久久久久亚洲影视| 在线免费观看羞羞视频一区二区| 国产精品视频精品| 另类专区欧美制服同性| 国产欧美婷婷中文| 欧美电影免费观看高清完整| 欧美视频13p| 久久久久久亚洲精品中文字幕| 日韩精品在线免费播放| 日韩**中文字幕毛片| 97av视频在线| 国产高清视频一区三区| **欧美日韩vr在线| 北条麻妃99精品青青久久| 午夜精品一区二区三区在线视频| 国产精品久久久久久久久久新婚| 国产一区二区三区在线| 日韩电影在线观看免费| 久久久久久成人精品| 亚洲色图综合久久| 日韩a**站在线观看| 高清亚洲成在人网站天堂| 国产91精品久久久| 欧美裸身视频免费观看| 最新亚洲国产精品| 久久久久久91| 国产网站欧美日韩免费精品在线观看| 久久视频中文字幕| 国产成人亚洲综合91| 欧美成人免费va影院高清| 亚洲天堂久久av| 亚洲一区二区三区四区在线播放| 成人看片人aa| 91久久精品国产91久久| 久久99精品久久久久久噜噜| 久久久久久国产精品美女| www高清在线视频日韩欧美| 综合网中文字幕| 91在线色戒在线| 久久综合国产精品台湾中文娱乐网| 亚洲最大在线视频| 96sao精品视频在线观看| 日韩视频免费在线| 国产成人福利夜色影视| 91美女片黄在线观看游戏| 色偷偷av亚洲男人的天堂| 日韩av片免费在线观看| 亚洲精品网站在线播放gif| 亚洲第一页在线| 国产成人一区二区三区电影| 欧美丰满少妇xxxx| 综合网日日天干夜夜久久| 日本精品久久久| 亚洲电影在线观看| 日本最新高清不卡中文字幕| 日韩视频免费在线观看| 亚洲人成电影网站色www| 亚洲天堂免费观看| 国产丝袜一区二区三区| 97色在线播放视频| 亚洲欧美国产日韩天堂区| 4p变态网欧美系列| 日韩一二三在线视频播| 日韩成人激情在线| 国语自产精品视频在线看抢先版图片| 亚洲国产精品免费| 亚洲性av在线| 欧美精品性视频| 成人黄色午夜影院| 欧美激情一区二区三区在线视频观看| 精品国产依人香蕉在线精品| 日韩精品在线影院| 国产精品日日摸夜夜添夜夜av| 国产欧美精品va在线观看| 欧美精品videossex88| 欧美整片在线观看| 91九色在线视频| 日韩国产精品一区| 欧美综合在线观看| 国产精品免费久久久久影院| 日本欧美一级片| 国产+成+人+亚洲欧洲| 欧美亚洲在线视频| 中文字幕亚洲情99在线| 亚洲综合在线中文字幕| 欧美日韩亚洲一区二| 欧美成人免费一级人片100| 日韩欧美一区二区三区久久| 国产精品美女午夜av| 日韩视频永久免费观看| 中文字幕亚洲在线| 91嫩草在线视频| 91av在线免费观看| 国内揄拍国内精品少妇国语| 亚洲激情视频在线观看| 久久躁狠狠躁夜夜爽| 国内伊人久久久久久网站视频| 91网站免费看| 性日韩欧美在线视频| 久久久天堂国产精品女人| 久久久国产成人精品| 91精品国产高清| 78m国产成人精品视频| 国产美女久久精品香蕉69| 亚洲欧美国产高清va在线播| 国产精品久久久久久久久久| 在线中文字幕日韩| 久久久噜噜噜久噜久久| 精品久久久久久久久久| 国产精品福利观看| 久久九九有精品国产23| 日韩精品丝袜在线| 久久久成人av| 久久精品中文字幕免费mv| 国产精品美女久久| 日韩精品在线观看一区二区| 国产日韩欧美在线| 最近更新的2019中文字幕| 国产精品一区二区三区免费视频| 亚洲经典中文字幕| 日韩久久免费电影| 国产激情综合五月久久| 亚洲区免费影片| 国产精品一二三视频| 欧美亚洲另类制服自拍| 国产一区二区三区日韩欧美| 欧美男插女视频| 亚洲视屏在线播放| 久久精品视频一| 成人国产在线视频| 久久国产精品影视| 国产精品激情av在线播放| 亚洲美女av黄| 欧美在线视频一区| 亚洲r级在线观看| 538国产精品一区二区免费视频| 亚洲国产精品大全| 欧美成人合集magnet| 成人在线国产精品| 欧美成人午夜影院| 亚洲午夜性刺激影院| 91精品国产亚洲| 亚洲精品综合久久中文字幕| 欧美与黑人午夜性猛交久久久| 日韩成人中文字幕| 国产精品稀缺呦系列在线| 狠狠躁夜夜躁久久躁别揉| 影音先锋日韩有码| 成人免费观看49www在线观看| 欧美亚洲在线播放| 亚洲国产精品悠悠久久琪琪| 欧美激情第6页| 国产精品wwwwww| 色综合91久久精品中文字幕| 亚洲高清福利视频| 深夜精品寂寞黄网站在线观看| 国产亚洲视频在线| 91久久精品国产91久久性色| 欧美黄色片免费观看|