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()