java使用代理访问网络的几种方法

Python040

java使用代理访问网络的几种方法,第1张

使用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中通过编程设置代理服务器并访问网络,现在作答如下:

1,讲解一下基础知识:

HTTP:是应用层协议,是基于传输层协议的。

TCP: 是传输层协议,是基于网络层协议的。

IP: 是网络层协议。

一个TCP的连接要进行三次握手(就像转户口一样,不详说),HTTP只是一个应用协议,也就是相当于一个自定义协议,即其没有对底层的传输方式进行干涉,只是对数据内容格式进行了定义。

2,我们再说说HTTP代理,从上可以理解,HTTP代理服务器就是这样一台机器:你把所有的HTTP请求都发到这个 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()

3,当然在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()