zoukankan      html  css  js  c++  java
  • JAVA基础知识之网络编程——-使用Proxy创建连接

    在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络,

    如果改用URLConnection conn = url.openConnection(proxy);方式,传入一个proxy对象,设置好代理IP和端口,则可以实现代理连接,

    下面是一个简单例子,

     1 package proxy;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintStream;
     5 import java.net.InetSocketAddress;
     6 import java.net.MalformedURLException;
     7 import java.net.Proxy;
     8 import java.net.URL;
     9 import java.net.URLConnection;
    10 import java.util.Scanner;
    11 
    12 public class ProxyTest {
    13     final String PROXY_ADDR = "172.20.230.5";
    14     final int PROXY_PORT = 3128;
    15     String urlStr = "http://www.baidu.com";
    16     //String urlStr = "http://www.crazyit.org";
    17     
    18     public void init() throws IOException {
    19         URL url = new URL(urlStr);
    20         Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT));
    21         //使用代理服务器打开链接
    22         URLConnection conn = url.openConnection(proxy);
    23         //URLConnection conn = url.openConnection();
    24         conn.setConnectTimeout(5000);
    25         try {
    26             Scanner scan = new Scanner(conn.getInputStream());
    27             PrintStream ps = new PrintStream("index.html");
    28             while (scan.hasNextLine()) {
    29                 String line = scan.nextLine();
    30                 System.out.println(line);
    31                 ps.println(line);
    32             }
    33         } catch (IOException e) {
    34             e.printStackTrace();
    35         }
    36     }
    37     
    38     public static void main(String[] args) throws IOException {
    39         new ProxyTest().init();
    40     }
    41 }

    实现自动代理

    在上面的例子中,每次用url对象open一个connection的时候,都需要显示地传入一个proxy对象才行。

    而实际上可以在connection之前,做一个默认代理设置,这样以后再openConnection的时候,就不需要显示传入proxy对象了。

    做默认代理设置需要重写ProxySelector的select方法,返回代理IP和端口列表,具体实现如下,

     1 package proxy;
     2 
     3 import java.io.IOException;
     4 import java.io.PrintStream;
     5 import java.net.InetSocketAddress;
     6 import java.net.MalformedURLException;
     7 import java.net.Proxy;
     8 import java.net.ProxySelector;
     9 import java.net.SocketAddress;
    10 import java.net.URI;
    11 import java.net.URL;
    12 import java.net.URLConnection;
    13 import java.util.ArrayList;
    14 import java.util.List;
    15 import java.util.Scanner;
    16 
    17 public class ProxyTest {
    18     final String PROXY_ADDR = "172.20.230.5";
    19     final int PROXY_PORT = 3128;
    20     String urlStr = "http://www.baidu.com";
    21     //String urlStr = "http://www.crazyit.org";
    22     
    23     public void init() throws IOException {
    24         ProxySelector.setDefault(new ProxySelector(){
    25 
    26             @Override
    27             public void connectFailed(URI arg0, SocketAddress arg1,
    28                     IOException arg2) {
    29                 System.out.println("无法连接到服务器");
    30                 
    31             }
    32 
    33             @Override
    34             public List<Proxy> select(URI uri) {
    35                 List<Proxy> result = new ArrayList<>();
    36                 result.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT)));
    37                 return result;
    38             }
    39             
    40         });
    41         
    42         URL url = new URL(urlStr);
    43         //使用代理服务器打开链接
    44         URLConnection conn = url.openConnection();
    45         conn.setConnectTimeout(5000);
    46         try {
    47             Scanner scan = new Scanner(conn.getInputStream());
    48             PrintStream ps = new PrintStream("index.html");
    49             while (scan.hasNextLine()) {
    50                 String line = scan.nextLine();
    51                 System.out.println(line);
    52                 ps.println(line);
    53             }
    54         } catch (IOException e) {
    55             e.printStackTrace();
    56         }
    57     }
    58     
    59     public static void main(String[] args) throws IOException {
    60         new ProxyTest().init();
    61     }
    62 }

    可以看到使用代理之后,再用url打开链接时就能像普通连接那样url.openConnection();了

  • 相关阅读:
    Maven私服安装
    Maven运行的方式
    Maven传递依赖的范围
    Maven子模块
    Maven父工程
    Maven项目指定JDK版本
    Maven传递依懒
    Maven概念模型
    Swift -欢迎界面1页, 延长启动图片的显示时间(LaunchImage)
    Swift
  • 原文地址:https://www.cnblogs.com/fysola/p/6089416.html
Copyright © 2011-2022 走看看