用java写的http代理(原理)

折腾了几天,搞出了一个网页代理服务器,只能代理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

效果:用java写的http代理(原理)_第1张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java,java,http,服务器)