java 实现Http代理 (4)
- 格式:docx
- 大小:12.91 KB
- 文档页数:3
本文由我司收集整编,推荐下载,如有疑问,请与我司联系
java 实现 Http 代理 (4)
2007/07/31 2813 接下来,我们将着重介绍一下 Dispatcher,因为这个类才是实
现的关键 下面这个方法完成转发,参数是我们之前创建的 HttpRequest 首先,我们
根据指定的 host 和 port 创建了一个 Socket,该 Socket 连接到真正的主机 然后,我
们调用了 request 方法,这个方法将 request 转发出去,比较简单,仅仅是将请求头
写到 Socket 的 OutputStream 里面。 第三步,我们使用 HttpResponseFactory 的 read
方法,从 Socket 的 InputStream 里面读取并封装出一个 HttpResponse 对象。 第四
步,将响应头和响应流都写到客户端。客户端的 OutputStream 从 HttpRequest 对象
里面可以得到。
/** * @param request - void public void dispatch(HttpRequest request,
HttpResponse response, ProxyHost proxyHost) String host = proxyHost.getHost(); int
port
= proxyHost.getPort(); Socket socket = null; socket = this.createSocket(host, port);
socket.setSoTimeout(10000); socket.setKeepAlive(false); InputStream
socketInputStream
= socket.getInputStream(); OutputStream socketOutputStream =
socket.getOutputStream(); if(logger.isDebugEnabled()) // logger.debug(“------------------
request.header\r\n” + request.toString()); this.request(request,
socketOutputStream);
HttpResponse httpResponse =
HttpConnectionFactory.createHttpResponse(socketInputStream,
socketOutputStream);
if(httpResponse != null)
response.setHttpHeader(httpResponse.getHttpHeader().clone());
response.setChunked(httpResponse.getChunked());
response.setContentType(httpResponse.getContentType());
response.setStatus(httpResponse.getStatus());
response.setReasonPhrase(httpResponse.getReasonPhrase());
this.resonse(request,
httpResponse, request.getOutputStream());