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());