我正在使用java中的Http代理。基本上我有3个应用程序:
网络服务器 这是我的客户端代码(摘自apache httpcore示例,但效果很好):
公共类ClientExecuteProxy(){
public static void main(String[] args)throws Exception {
HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http");
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
HttpHost target = new HttpHost("issues.apache.org", 443, "https");
HttpGet req = new HttpGet("/");
System.out.println("executing request to " + target + " via " + proxy);
HttpResponse rsp = httpclient.execute(target, req);
HttpEntity entity = rsp.getEntity();
System.out.println("----------------------------------------");
System.out.println(rsp.getStatusLine());
Header[] headers = rsp.getAllHeaders();
for (int i = 0; i<headers.length; i++) {
System.out.println(headers[i]);
}
System.out.println("----------------------------------------");
if (entity != null) {
System.out.println(EntityUtils.toString(entity));
}
} finally {
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
}
如果我直接执行对服务器的请求(如果我注释行“httpclient.getParams()。setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);”),它的工作没有任何问题。但如果我这样离开它,它将通过代理。以下是我不知道如何处理代理的部分: 代理侦听请求,读取其内容并验证它是否遵守某些策略。如果确定它将转发到服务器,否则它将丢弃请求,它将发送带有错误的HttpResponse。问题是请求是否正常并且需要转发。代理如何知道转发它的地址?我的问题是:如何从“HttpHost target = new HttpHost”(issues.apache.org“,443,”https“)行中输入的请求中获取信息;”? 我用谷歌搜索了几个小时但没有发现任何东西。请有人帮帮我吗?
答案 0 :(得分:0)
为应用程序或浏览器定义HTTP代理时,可以:
将有一个前面的CONNECT请求形成一个隧道,告诉你目标主机:端口,或
整个目标网址位于GET / POST / ...请求行的中间。通常,没有代理,这只是相对于TCP连接的host:port的相对URL。