1、想用java编写个代理服务器,求具体一些思路,详细一些,谢谢
在编写代理服务器之前,首先应该明白一点,Java的代理机制,如图所示:
那么Java就处于中间这层代理服务器,代理服务器所作的事情如下:
1、接收客户端请求,进行处理,然后发送给服务端
2、接收服务端响应,进行处理,然后发送给客户端
这样,就更清晰了,Java提供了代理的API为,java.net.Proxy类。此类表示代理设置,通常为类型(http、socks)和套接字地址。Proxy 是不可变对象。
也就是说Java可以制作高级协议的代理,如 HTTP 或 FTP。也可以制作SOCKS(V4 或 V5)代理。
首先,使用到了URL类,HttpURLConnection类及其我们的代理类Proxy类。他们都位于java.net包中。
第一步:生成代理,指定端口为8888:
第二步:使用URLConnection类进行连接www.moonsos.com
第三步:打开URL,并且读取HTML源码
2、怎样通过java使用socks代理访问服务器
开发socks5代理服务器_IT/计算机_专业资料。摘要:用Java语言成功开发了一个...支持常见的HTTP代理和Sock4、Sock5代理,可以以用于局域网中,socket代理来连接到外网, 这里是java使用代理连接到...// 设置不需要通过代理服务器访问的主机,可以使用*...prop.setProperty("socksProxyHost",
3、如何用java使用代理
Java中,使用proxy是通过设置java环境变量来实现的,也就是JVM的系统属性。
我们需要设置三个属性,proxySet proxyHost和proxyPort。
proxySet 是个boolean类型的,可以设置为true或者false,true代表使用代理服务器。
proxyHost 是代理服务器的IP地址
proxyPort 是代理服务器的端口地址。
我们有两种方法设置这种系统属性,
一种是命令行下运行Java程序的时候,通过参数付值
一种是在java源程序中设置。
第一种方法的格式如下:
java -DproxySet=true -DproxyHost=myProxyServer.come -DproxyPort=80 MyJavaApp
第二种方法,就是直接在源程序中通过系统属性来写,如下:
import java.util.Properties;
...
...
strProxy="221.15.5.67";
strPort="8080";
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",strProxy);
systemProperties.setProperty("http.proxyPort",strPort);
....
JDK1.3以上版本,只要设置了proxyHost和proxyPort就不用写proxySet了。
那么反过来,显示这些系统属性,就可以看到有没有使用代理了。
4、java HTTP代理服务器开发 求助帖
说实话,你的问题很那个。。
不过应该也能实现。
现在问题主要是由于b不能访问c,所以c只能使用TimerTask定时去访问b。
b有2个listener,一个负责侦听来自a的请求,一个负责侦听来自b的。
b中应该会使用到多线程。
下面定义a的Request为x,c的Request为y
由于b会有多个来自a转发的请求,可能会有x1\x2\x3等很多并发的请求,所以b在初始化的时候就需要建立一个等待池.
等待池应该是单例且线程同步的,x一来就new object(request,response),然后放入list。
c的定时器一到,就访问b开放给c的listener,request y。y首先遍历等待池,取出x的request,然后用取出x的response的返回给a。直到等待池为空为止,然后y response给c。
不过要注意的是
1)你会发现,由于c给b的数据应该是放到request y里面作为参数来传的。
2)a的请求如果需要c不同数据接口的数据,那c-->b的request y里就应该包含所有的数据,然后在遍历等待池的时候根据a-->b的request x的id(可以使用sessionid)来区分取哪个。
3)最差的情况,
1,a源源不断的发出x请求,c的request遍历就死循环。
2,如果c的定时时间太短,y1还没完,y2就来了。
3,a源源不断的发出x请求,但是某一请求Xn就无法抢到资源,Xn就挂掉。
这里面很多处理你还要多加控制。
这个想法没实验过,其实如果b可以访问c,其实什么问题都没有了
最后问一句,谁给你这样的需求的?打他
5、Java 中怎样在程序中设置代理服务器
你的问题应该是:在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();
6、Java怎么设置代理来访问网络?
你的问题应该是:在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();
7、java 开发一个http的代理服务器
说实话,你的问题很那个。。
不过应该也能实现。
现在问题主要是由于b不能访问c,所以c只能使用TimerTask定时去访问b。
b有2个listener,一个负责侦听来自a的请求,一个负责侦听来自b的。
b中应该会使用到多线程。
下面定义a的Request为x,c的Request为y
由于b会有多个来自a转发的请求,可能会有x1\x2\x3等很多并发的请求,所以b在初始化的时候就需要建立一个等待池.
等待池应该是单例且线程同步的,x一来就new object(request,response),然后放入list。
c的定时器一到,就访问b开放给c的listener,request y。y首先遍历等待池,取出x的request,然后用取出x的response的返回给a。直到等待池为空为止,然后y response给c。
不过要注意的是
1)你会发现,由于c给b的数据应该是放到request y里面作为参数来传的。
2)a的请求如果需要c不同数据接口的数据,那c-->b的request y里就应该包含所有的数据,然后在遍历等待池的时候根据a-->b的request x的id(可以使用sessionid)来区分取哪个。
3)最差的情况,
1,a源源不断的发出x请求,c的request遍历就死循环。
2,如果c的定时时间太短,y1还没完,y2就来了。
3,a源源不断的发出x请求,但是某一请求Xn就无法抢到资源,Xn就挂掉。
这里面很多处理你还要多加控制。
这个想法没实验过,其实如果b可以访问c,其实什么问题都没有了
最后问一句,谁给你这样的需求的?打他
8、java web 一般用什么代理服务器
tomcat支持java web,一般是和apache组合使用,访问的时候先访问apache,再由apache调用tomcat。
不过配置比较麻烦,你可以用护卫神.apache大师,一键安装apache+tomcat+php+jsp+mysql+ftp
9、怎么用java实现一个代理服务器,需要支持htt
怎么用java实现一个代理服务器,需要支持htt
代理服务器的应用非常广泛。比如,在企业网内部,它可以用来控制员工在工作时浏览的Internet内容,阻止员工访问某些类型的内容或某些指定的网站。代理服务器实际上扮演着浏览器和Web服务器之间的中间人的角色,能够对浏览器请求进行各种各样的处理,能够过滤广告和Cookie,能够预先提取Web页面,使得浏览器访问页面的速度更快,等等。
10、JAVA中如何设置代理服务器,取消代理服务器
在JAVA中怎么设置代理服务器呢,非常简单
public void setServiceProxy(Config config) {
this.config = config;
System.setProperty("http.proxyHost", config.getProxyHost());
System.setProperty("http.proxyPort", config.getProxyPort());
System.setProperty("https.proxyHost", config.getProxyHost());
System.setProperty("https.proxyPort", config.getProxyPort());
}
然后在每一个HttpUrlConnection请求中,设置代理服务器用户名和密码,并进行Base64加密(看你代理服务器的要求,可能因代理服务器不同而不同),代码如下
private HttpURLConnection getProxyHttpConnection() throws IOException {
String authorization = config.getProxyUser() + ":"
+ config.getProxyPassword();
URL url = new URL(config.getRequestUrl());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Proxy-Authorization",
"Basic " + Base64.encodeBase64String(authorization.getBytes()));
return conn;
}