折腾了几天,搞出了一个网页代理服务器,只能代理http 网页。
用法:chrome 浏览器加proxy switchomega插件。端口号8000。如在本机上运行,代理主机为 127.0.0.1 当然也可放在其他主机上,代理地址写布署的主机地址 注意,插件只能选http
通道,不能选https或者Sock 4或者 5。
全部代码
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class Daili {
public static void main(String[] args) {
ExecutorService es=Executors.newFixedThreadPool(5);
try {
ServerSocket ss = new ServerSocket(8000);
while(true) {
Socket sc=ss.accept();
es.execute(new Runnable() {
public void run() {
try {
InputStream is=sc.getInputStream();
String s="";
String zz="";
int k;
do {
k=is.read();
s=s+(char)k;
}while(s.indexOf("\r\n\r\n")<0);
System.out.println(s);
//1----------------------------------------------------------------------------------------------------------
if(s.indexOf("CONNECT")>=0) {
zz=s.substring(7,s.indexOf("HTTP/1.1")-1);
zz=zz.trim();
zz="https://"+zz;
}
if(s.indexOf("GET")>=0) {
zz=s.substring(4,s.indexOf("HTTP/1.1")-1);
zz=zz.trim();
}
System.out.println(zz);
//2----------------------------------------------------------------------------------------------------------
//URLconnect 被请求网页的内容数据
try {
URL url=new URL(zz);
try {
URLConnection uc=url.openConnection();
uc.setConnectTimeout(5000);
uc.setReadTimeout(3000);
int g=uc.getContentLength();
InputStream is2=uc.getInputStream();
OutputStream os=sc.getOutputStream();
os.write("HTTP/1.1 200 ok\r\n".getBytes());
os.write("Server:java\r\n".getBytes());
os.write(("Content-Length:1000\r\n").getBytes());
os.write(("Content-Language:en\r\n").getBytes());
os.write("\r\n".getBytes() );
os.flush();
System.out.println(zz);
for(int c=0;c<g;c++) {
os.write(is2.read());
}
os.flush();
System.out.println(2);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//3-----------------------------------------------------------------------------------------------------------
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
效果:
版权声明:本文为m0_59802969原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。