JAVA版 Http代理服务器
来源:互联网 发布:数控加工编程 编辑:程序博客网 时间:2024/06/05 21:52
package Server;
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;
import java.io.OutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.SocketTimeoutException;
import java.net.ConnectException;
import java.net.UnknownHostException;
import java.net.*;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2008</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class HttpProxy extends Thread {
Socket socket = null;
public HttpProxy(Socket c) {
this.socket = c;
this.start();
}
public void run() {
byte bytes[] = new byte[1024];
try {
socket.setSoTimeout(20);
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
int ch = in.read();
String line = "";
while (ch != -1) {
line += (char) ch;
if (ch == 13) {
break;
}
ch = in.read();
}
String u = line.split(" ")[1];
URL url = new URL(u);
int port = url.getPort();
if (port == -1) {
port = url.getDefaultPort();
}
Socket request = null;
try {
request = new Socket(url.getHost(), port);
}catch(ConnectException ex){
socket.close();
ex.printStackTrace();
}
catch(UnknownHostException ex){
socket.close();
ex.printStackTrace();
} catch (IOException ex) {
socket.close();
ex.printStackTrace();
}
if (!socket.isClosed()) {
request.setSoTimeout(1000);
OutputStream requestOut = request.getOutputStream();
requestOut.write(line.getBytes());
try{
while ((ch = in.read(bytes)) > 0) {
requestOut.write(bytes, 0, ch);
requestOut.flush();
}
} catch (SocketTimeoutException ex) {
}
InputStream requestIn = request.getInputStream();
try {
while ((ch = requestIn.read(bytes)) > 0) {
out.write(bytes, 0, ch);
}
} catch (SocketTimeoutException ex) {
request.close();
}
out.close();
in.close();
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ServerSocket ssock;
Socket c;
try {
ssock = new ServerSocket(9000);
while (true) {
c = ssock.accept();
new HttpProxy(c);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
还有很多问题存在,但基本的已经实现
- JAVA版 Http代理服务器
- java写的http代理服务器
- JAVA写HTTP代理服务器(一)-socket实现
- JAVA写HTTP代理服务器(二)-netty实现
- http代理服务器
- java通过代理服务器实现对FTP和HTTP的访问
- 开启Java对代理服务器和HTTP验证的支持
- 兼容https和http协议的java代理服务器代码
- JAVA写HTTP代理服务器(三)-https明文捕获
- Nginx--HTTP反向代理服务器
- http代理服务器工作步骤
- python实战--Http代理服务器
- http代理服务器工作原理
- HTTP代理服务器的实现
- 移植tinyproxy http代理服务器
- GO语言HTTP代理服务器
- HTTP代理,代理服务器
- nginx HTTP 代理服务器
- ASP.NET AJAX入门系列(1):概述
- MPI
- 4.5 客户端设计
- 解码 XML 和 DTD
- [转]修炼一名软件工程师的职业水准
- JAVA版 Http代理服务器
- 4.5.1 启动
- 用htpasswd给nginx加个密码,不加的话出了500错误
- SDP协议
- 文章收集
- Google和百度、雅虎的站内搜索代码
- 集合类2-curve,lines,line
- .net2.0 Web WhtPager/WhtWebControl 分页控件 简单好用
- JavaScript中访问C#变量及方法