亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

java代理服務器設置

系統 1862 0

轉: http://blog.csdn.net/quyouhu/article/details/7651371

一、設置系統代理

方法如下:

java -Dhttp.proxyHost=192.168.254.254 -Dhttp.proxyPort=9000 com.domain.Program

System.setProperty("http.proxyHost", "192.168.254.254");

System.setProperty("http.proxyPort", "9000");

System.setProperty("http.nonProxyHosts", "java.oreilly.com|xml.oreilly.com"); //這兩個主機不要代理

二、代理類 java.net.Proxy

Proxy中的三個枚舉對象

  • Proxy.Type.DIRECT

  • Proxy.Type.HTTP

  • Proxy.Type.SOCKS

    對于一個代理服務器來說最重要的就是IP和port,下面的代碼制作了一個Http代理

    1. SocketAddressaddress= new InetSocketAddress( "proxy.example.com" , 80 );
    2. Proxyproxy= new Proxy(Proxy.Type.HTTP,address);

    三、java 1.5 中新增加了一個類 ProxySelector 具體用法,用到時請查Java Network programming chapter7 7.4

    轉:

    今天再測試Socket編程時,無法連接外網。公司用的是Http的代理。上網搜索也沒看太懂,所以花了大量時間來學習。看了HTTP和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連接。再說下去也沒意思了,看以下代碼:

    Java代碼 復制代碼 收藏代碼
    1. //以下地址是代理服務器的地址
    2. Socketsocket= new Socket( "10.1.2.188" , 80 );
    3. //寫與的內容就是遵循HTTP請求協議格式的內容,請求百度
    4. socket.getOutputStream().write( new String( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ).getBytes());
    5. byte []bs= new byte [ 1024 ];
    6. InputStreamis=socket.getInputStream();
    7. int i;
    8. while ((i=is.read(bs))> 0 ){
    9. System.out.println( new String(bs, 0 ,i));
    10. }
    11. is.close();
    1. //以下地址是代理服務器的地址
    2. Socketsocket= new Socket( "10.1.2.188" , 80 );
    3. //寫與的內容就是遵循HTTP請求協議格式的內容,請求百度
    4. socket.getOutputStream().write( new String( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ).getBytes());
    5. byte []bs= new byte [ 1024 ];
    6. InputStreamis=socket.getInputStream();
    7. int i;
    8. while ((i=is.read(bs))> 0 ){
    9. System.out.println( new String(bs, 0 ,i));
    10. }
    11. is.close();

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

    Java代碼 復制代碼 收藏代碼
    1. //設置代理
    2. System.setProperty( "http.proxySet" , "true" );
    3. System.setProperty( "http.proxyHost" , "10.1.2.188" );
    4. System.setProperty( "http.proxyPort" , "80" );
    5. //直接訪問目的地址
    6. URLurl= new URL( "http://www.baidu.com" );
    7. URLConnectioncon=url.openConnection();
    8. InputStreamReaderisr= new InputStreamReader(con.getInputStream());
    9. char []cs= new char [ 1024 ];
    10. int i= 0 ;
    11. while ((i=isr.read(cs))> 0 ){
    12. System.out.println( new String(cs, 0 ,i));
    13. }
    14. isr.close();
    1. //設置代理
    2. System.setProperty( "http.proxySet" , "true" );
    3. System.setProperty( "http.proxyHost" , "10.1.2.188" );
    4. System.setProperty( "http.proxyPort" , "80" );
    5. //直接訪問目的地址
    6. URLurl= new URL( "http://www.baidu.com" );
    7. URLConnectioncon=url.openConnection();
    8. InputStreamReaderisr= new InputStreamReader(con.getInputStream());
    9. char []cs= new char [ 1024 ];
    10. int i= 0 ;
    11. while ((i=isr.read(cs))> 0 ){
    12. System.out.println( new String(cs, 0 ,i));
    13. }
    14. isr.close();

    最后總結一下:

    在使用HTTP代理的環境中,

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

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

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

    Java代碼 復制代碼 收藏代碼
    1. SocketChannelsc=SocketChannel.open( new InetSocketAddress( "10.1.2.188" , 80 ));
    2. sc.write(Charset.forName( "utf8" ).encode( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ));
    3. ByteBufferbuffer=ByteBuffer.allocate( 1024 );
    4. while (sc.read(buffer)!=- 1 ){
    5. buffer.flip();
    6. System.out.println(Charset.forName( "utf8" ).decode(buffer));
    7. buffer.clear();
    8. }
    9. sc.close();
    1. SocketChannelsc=SocketChannel.open( new InetSocketAddress( "10.1.2.188" , 80 ));
    2. sc.write(Charset.forName( "utf8" ).encode( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ));
    3. ByteBufferbuffer=ByteBuffer.allocate( 1024 );
    4. while (sc.read(buffer)!=- 1 ){
    5. buffer.flip();
    6. System.out.println(Charset.forName( "utf8" ).decode(buffer));
    7. buffer.clear();
    8. }
    9. sc.close();

    《《以下是從摘自他人的博客》》: http://hi.baidu.com/splike/blog/item/ed2191d7c94360d1a144dfe3.html

    Java Socket編程中加入代理
    2010-06-02 11:12

    有些時候我們的網絡不能直接連接到外網 , 需要使用 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() {
    return new 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();
    }
    }
  • 一、設置系統代理

    方法如下:

    java -Dhttp.proxyHost=192.168.254.254 -Dhttp.proxyPort=9000 com.domain.Program

    System.setProperty("http.proxyHost", "192.168.254.254");

    System.setProperty("http.proxyPort", "9000");

    System.setProperty("http.nonProxyHosts", "java.oreilly.com|xml.oreilly.com"); //這兩個主機不要代理

    二、代理類 java.net.Proxy

    Proxy中的三個枚舉對象

  • Proxy.Type.DIRECT

  • Proxy.Type.HTTP

  • Proxy.Type.SOCKS

    對于一個代理服務器來說最重要的就是IP和port,下面的代碼制作了一個Http代理

    1. SocketAddressaddress= new InetSocketAddress( "proxy.example.com" , 80 );
    2. Proxyproxy= new Proxy(Proxy.Type.HTTP,address);

    三、java 1.5 中新增加了一個類 ProxySelector 具體用法,用到時請查Java Network programming chapter7 7.4

    轉:

    今天再測試Socket編程時,無法連接外網。公司用的是Http的代理。上網搜索也沒看太懂,所以花了大量時間來學習。看了HTTP和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連接。再說下去也沒意思了,看以下代碼:

    Java代碼 復制代碼 收藏代碼
    1. //以下地址是代理服務器的地址
    2. Socketsocket= new Socket( "10.1.2.188" , 80 );
    3. //寫與的內容就是遵循HTTP請求協議格式的內容,請求百度
    4. socket.getOutputStream().write( new String( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ).getBytes());
    5. byte []bs= new byte [ 1024 ];
    6. InputStreamis=socket.getInputStream();
    7. int i;
    8. while ((i=is.read(bs))> 0 ){
    9. System.out.println( new String(bs, 0 ,i));
    10. }
    11. is.close();
    1. //以下地址是代理服務器的地址
    2. Socketsocket= new Socket( "10.1.2.188" , 80 );
    3. //寫與的內容就是遵循HTTP請求協議格式的內容,請求百度
    4. socket.getOutputStream().write( new String( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ).getBytes());
    5. byte []bs= new byte [ 1024 ];
    6. InputStreamis=socket.getInputStream();
    7. int i;
    8. while ((i=is.read(bs))> 0 ){
    9. System.out.println( new String(bs, 0 ,i));
    10. }
    11. is.close();

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

    Java代碼 復制代碼 收藏代碼
    1. //設置代理
    2. System.setProperty( "http.proxySet" , "true" );
    3. System.setProperty( "http.proxyHost" , "10.1.2.188" );
    4. System.setProperty( "http.proxyPort" , "80" );
    5. //直接訪問目的地址
    6. URLurl= new URL( "http://www.baidu.com" );
    7. URLConnectioncon=url.openConnection();
    8. InputStreamReaderisr= new InputStreamReader(con.getInputStream());
    9. char []cs= new char [ 1024 ];
    10. int i= 0 ;
    11. while ((i=isr.read(cs))> 0 ){
    12. System.out.println( new String(cs, 0 ,i));
    13. }
    14. isr.close();
    1. //設置代理
    2. System.setProperty( "http.proxySet" , "true" );
    3. System.setProperty( "http.proxyHost" , "10.1.2.188" );
    4. System.setProperty( "http.proxyPort" , "80" );
    5. //直接訪問目的地址
    6. URLurl= new URL( "http://www.baidu.com" );
    7. URLConnectioncon=url.openConnection();
    8. InputStreamReaderisr= new InputStreamReader(con.getInputStream());
    9. char []cs= new char [ 1024 ];
    10. int i= 0 ;
    11. while ((i=isr.read(cs))> 0 ){
    12. System.out.println( new String(cs, 0 ,i));
    13. }
    14. isr.close();

    最后總結一下:

    在使用HTTP代理的環境中,

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

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

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

    Java代碼 復制代碼 收藏代碼
    1. SocketChannelsc=SocketChannel.open( new InetSocketAddress( "10.1.2.188" , 80 ));
    2. sc.write(Charset.forName( "utf8" ).encode( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ));
    3. ByteBufferbuffer=ByteBuffer.allocate( 1024 );
    4. while (sc.read(buffer)!=- 1 ){
    5. buffer.flip();
    6. System.out.println(Charset.forName( "utf8" ).decode(buffer));
    7. buffer.clear();
    8. }
    9. sc.close();
    1. SocketChannelsc=SocketChannel.open( new InetSocketAddress( "10.1.2.188" , 80 ));
    2. sc.write(Charset.forName( "utf8" ).encode( "GEThttp://www.baidu.com/HTTP/1.1\r\n\r\n" ));
    3. ByteBufferbuffer=ByteBuffer.allocate( 1024 );
    4. while (sc.read(buffer)!=- 1 ){
    5. buffer.flip();
    6. System.out.println(Charset.forName( "utf8" ).decode(buffer));
    7. buffer.clear();
    8. }
    9. sc.close();

    《《以下是從摘自他人的博客》》: http://hi.baidu.com/splike/blog/item/ed2191d7c94360d1a144dfe3.html

    Java Socket編程中加入代理
    2010-06-02 11:12

    有些時候我們的網絡不能直接連接到外網 , 需要使用 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() {
    return new 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();
    }
    }
  • java代理服務器設置


    更多文章、技術交流、商務合作、聯系博主

    微信掃碼或搜索:z360901061

    微信掃一掃加我為好友

    QQ號聯系: 360901061

    您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

    【本文對您有幫助就好】

    您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

    發表我的評論
    最新評論 總共0條評論
    主站蜘蛛池模板: 精品无人区乱码1区2区 | 色综合色综合色综合网址 | 青青青国产免费线在 | 美女黄频 | a毛片全部免费播放 | 91亚洲精品国产自在现线 | 日韩在线观看一区二区三区 | 亚洲精品国自产拍影院 | 久久国产精品视频一区 | 国产在线19禁免费观看国产 | 日韩美a一级毛片 | 国产二区在线播放 | 欧美精品日本一级特黄 | 爱爱综合网| 老司机午夜性大片免费 | 奇米444| 中文字幕无线码中文字幕免费 | 国产成人毛片 | 国产欧美乱码在线看 | 久青草视频在线 | 五月婷婷激情四射 | 国产在线观看一区二区三区 | 日本不卡在线一区二区三区视频 | 欧美猛交xxxxx | h视频网站在线观看 | 国产一区二区精品久久岳 | 欧美香蕉网 | 久久加久久 | 麻豆一区二区 | 日本一级爰免费视频 | 国产一区二区三区 | 久久无码精品一区二区三区 | 看片一区 | 国产女主播喷出白浆视频 | 国产成人综合精品 | 妖精视频免费在线观看 | 亚洲欧美日韩在线不卡中文 | 亚洲精品久久久久综合中文字幕 | 久插视频 | 亚洲视频免费观看 | 欧美大尺码毛片 |