您的位置:首页 > 理论基础 > 计算机网络

Atitit.http代理的实现 代码java php c# python

2016-04-21 22:51 881 查看
Atitit.http代理的实现 代码java php c# python

1. 代理服务器用途

代理服务器看成是一种扩展浏览器功能的途径。例如,在把数据发送给浏览器之前,可以用代理服务器压缩数据

调试器

数据搜集器

木马病毒

作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax
package aaa0proxy;

import java.io.*;

import java.net.*;

import log.Log;

import com.attilax.exception.ExUtil;

import com.attilax.json.AtiJson;

import com.attilax.net.SocketUtil;

import com.attilax.web.UrlX;

public class MyHttpProxy
extends Thread {

static public int CONNECT_RETRIES =
5; // 尝试与目标主机连接次数

static public int CONNECT_PAUSE =
5; // 每次建立连接的间隔时间

static public int TIMEOUT =
20000; // 每次尝试连接的最大时间

static public boolean logging =
false;
// 是否记录日志

// 与客户端相连的Socket

protected Socket
csocket;

public MyHttpProxy(Socket
cs) {

csocket =
cs;

start();//run ()

}

public void run()
{

String
reqHead_firstLine =
"";
// 读取请求头

String
URL =
"";
// 读取请求URL

String
host =
"";
// 读取目标主机host

int port =
80; // 默认端口80

Socket
ssocket =
null;

SocketUtil
client_SocketUtil=null;

SocketUtil
server_SocketUtil_remote =
null;

Log
logger=new Log();

System.out.println("--log
file:"+logger.LOGFILENAME_C );

try {

client_SocketUtil=new SocketUtil(csocket).setSoTimeout(TIMEOUT).setLogger(logger);

UrlX
urlUtil=new UrlX();

try {

reqHead_firstLine =
client_SocketUtil. readFirstLine().firstLine;

}
catch (Exception
e) {

System.out.println("---read
first line ex,msg:"+e.getMessage());

//、、+ "csocket inso:"+
AtiJson.toJson(csocket) );

ExUtil.throwEx(e);

}

if(reqHead_firstLine.contains(".jpg"))

System.out.println("dbg");

// 抽取URL(<a
href="http://www.baidu.com/">http://www.baidu.com/</a>)

//GET http://s.cimg.163.com/catchpic/E/E0/E007CE953D48E9E1EC2319B343B5940D.jpg.670x270.jpg HTTP/1.1

URL =
urlUtil.getRequestURL(reqHead_firstLine);

System.out.println("--url:"+URL);

if(URL.contains("1366134690"))

System.out.println("dbg");

host =
urlUtil.hostNoport(URL);

port=urlUtil.port(URL);

//s.cimg.163.com

server_SocketUtil_remote=new SocketUtil()

.createConn2remote(host,
port,
CONNECT_RETRIES,

CONNECT_PAUSE).setSoTimeout(TIMEOUT).setLogger(logger)

.write(reqHead_firstLine+"").write(client_SocketUtil.charFirstLineBreak);

server_SocketUtil_remote.pipe(client_SocketUtil.is,
client_SocketUtil.os);
// 建立通信管道;

}
catch (Exception
e) {

e.printStackTrace();

}
finally {

new SocketUtil(
client_SocketUtil).close();

new SocketUtil(
server_SocketUtil_remote) .close();

logger.flush();logger.close();

System.out.println("--thd
finish");

}

}

public static void startProxy(int port,
Class clobj)
{

try {

ServerSocket
ssock =
new ServerSocket(port);
//if port use ,throw
ex

/*

* java.net.BindException: Address already in use: JVM_Bind

* */

System.out.println("---start
ok port:"+port);

while (true)
{

Class[]
sarg =
new Class[1];

Object[]
arg =
new Object[1];

sarg[0] = Socket.class;

try {

java.lang.reflect.Constructor cons =
clobj

.getDeclaredConstructor(sarg);

arg[0] =
ssock.accept();

cons.newInstance(arg);
// 创建HttpProxy或其派生类的实例

}
catch (Exception
e) {

Socket
esock = (Socket)
arg[0];

try {

esock.close();

}
catch (Exception
ec) {

}

}

}

}
catch (IOException
e) {

System.out.println("\nStartProxy
Exception:");

e.printStackTrace();

}

}

// 测试用的简单main方法

static public void main(String
args[])
throws FileNotFoundException {

System.out.println("在端口808启动代理服务器\n");

//MyHttpProxy.log_S = file_S;

//MyHttpProxy.log_C = file_C;

//MyHttpProxy.logging = true;

MyHttpProxy.startProxy(808,
MyHttpProxy.class);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: