JAVA基础知识之网络编程——-使用Proxy创建连接
在前面的HTTP网络通信的例子中,使用了URLConnection conn = url.openConnection();连接网络,
如果改用URLConnection conn = url.openConnection(proxy);方式,传入一个proxy对象,设置好代理IP和端口,则可以实现代理连接,
下面是一个简单例子,
package proxy; import java.io.IOException;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner; public class ProxyTest {
final String PROXY_ADDR = "172.20.230.5";
final int PROXY_PORT = 3128;
String urlStr = "http://www.baidu.com";
//String urlStr = "http://www.crazyit.org"; public void init() throws IOException {
URL url = new URL(urlStr);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT));
//使用代理服务器打开链接
URLConnection conn = url.openConnection(proxy);
//URLConnection conn = url.openConnection();
conn.setConnectTimeout(5000);
try {
Scanner scan = new Scanner(conn.getInputStream());
PrintStream ps = new PrintStream("index.html");
while (scan.hasNextLine()) {
String line = scan.nextLine();
System.out.println(line);
ps.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) throws IOException {
new ProxyTest().init();
}
}
实现自动代理
在上面的例子中,每次用url对象open一个connection的时候,都需要显示地传入一个proxy对象才行。
而实际上可以在connection之前,做一个默认代理设置,这样以后再openConnection的时候,就不需要显示传入proxy对象了。
做默认代理设置需要重写ProxySelector的select方法,返回代理IP和端口列表,具体实现如下,
package proxy; import java.io.IOException;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class ProxyTest {
final String PROXY_ADDR = "172.20.230.5";
final int PROXY_PORT = 3128;
String urlStr = "http://www.baidu.com";
//String urlStr = "http://www.crazyit.org"; public void init() throws IOException {
ProxySelector.setDefault(new ProxySelector(){ @Override
public void connectFailed(URI arg0, SocketAddress arg1,
IOException arg2) {
System.out.println("无法连接到服务器"); } @Override
public List<Proxy> select(URI uri) {
List<Proxy> result = new ArrayList<>();
result.add(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_ADDR, PROXY_PORT)));
return result;
} }); URL url = new URL(urlStr);
//使用代理服务器打开链接
URLConnection conn = url.openConnection();
conn.setConnectTimeout(5000);
try {
Scanner scan = new Scanner(conn.getInputStream());
PrintStream ps = new PrintStream("index.html");
while (scan.hasNextLine()) {
String line = scan.nextLine();
System.out.println(line);
ps.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) throws IOException {
new ProxyTest().init();
}
}
可以看到使用代理之后,再用url打开链接时就能像普通连接那样url.openConnection();了
JAVA基础知识之网络编程——-使用Proxy创建连接的更多相关文章
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- JAVA基础知识之网络编程——-网络通信模型(IO模型)
<Unix网络编程:卷1>中介绍了5中I/O模型,JAVA作为运行在宿主机上的程序,底层也遵循这5中I/O模型规则.这5中I/O模型分别是: 阻塞式IO 非阻塞式IO I/O复用 信号驱动 ...
- JAVA基础知识之网络编程——-基于NIO的非阻塞Socket通信
阻塞IO与非阻塞IO 通常情况下的Socket都是阻塞式的, 程序的输入输出都会让当前线程进入阻塞状态, 因此服务器需要为每一个客户端都创建一个线程. 从JAVA1.4开始引入了NIO API, NI ...
- JAVA基础知识之网络编程——-使用MutilcastSocket实现多点广播
IP多点广播原理 设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看作一个组,当客户需要发送和接受信息时,加入到该组即可. IP协议为多点广播提供了一批特殊的IP地址,范围是224.0.0 ...
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
- JAVA基础知识之网络编程——-基于AIO的异步Socket通信
异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞 ...
- JAVA基础知识之网络编程——-基于TCP通信的简单聊天室
下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
- JAVA基础知识之网络编程——-关于阻塞IO/非阻塞IO/同步IO/异步IO的一些参考文章
Java NIO之多个Selector的实现Java NIO类库Selector机制解析(上) Java NIO类库Selector机制解析(下) https://www.zhihu.com/ques ...
随机推荐
- ads 错误
这个问题已经不是第一次碰到了,每次弄周立功的EasyARM2210的时候都会遇见,每次都没有记住.就是要用ADS运行板子配套光盘里面的配套程序的时候会出现: (Fatal)L6002U:Could n ...
- Leetcode: Longest Substring with At Least K Repeating Characters
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- sdutoj 2607 Mountain Subsequences
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2607 Mountain Subsequence ...
- find 命令使用总结
参考:http://os.51cto.com/art/200908/141119.htm 1.find命令的一般形式 find pathname -options [-print -exec -ok ...
- Java基础(58):Eclipse中的快捷键大全(转)
Eclipse快捷键大全(转载) Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行 ...
- c#经典俄罗斯方块 vs2012开发
把网上两个开源的俄罗斯方块,整合到一起了,开发环境vs2012+.net 4.0,有问题.建议可以加群沟通哦 复古的 c#写的一个俄罗斯方块小游戏,友好的人机交互,具体功能如下: 1.游戏分七个关卡, ...
- mesos资源动态分配测试
测试集群配置 60CPU,320G RAM 测试内容:先运行一个需要60CPU的Application1,再运行一个需要50CPU的Application2. 结果分析 如果要等Application ...
- paper 42 :图像的小波变换
关于小波变换我只是有一个很朴素了理解.不过小波变换可以和傅里叶变换结合起来理解. 傅里叶变换是用一系列不同频率的正余弦函数去分解原函数,变换后得到是原函数在正余弦不同频率下的系数. 小波变换使用一系列 ...
- 【Install】我是如何安装Linux类系统的
安装系统:ubuntu12.04 i386 DVD U盘启动12.04live系统 连线,设置连接 安装系统到硬盘 “语言支持”,更新 安装gnome经典界面 sudo apt-get i ...
- Mysql子查询、关联查询
mysql中update.delete.install尽量不要使用子查询 一.mysql查询的五种子句 where(条件查询).having(筛选).group by(分组).orde ...