Java tutorial
package org.apache.http.protocol; import java.io.IOException; import java.net.InetAddress; import org.apache.http.HttpConnection; import org.apache.http.HttpException; import org.apache.http.HttpHost; import org.apache.http.HttpInetConnection; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpVersion; import org.apache.http.ProtocolException; import org.apache.http.ProtocolVersion; import org.apache.http.annotation.Immutable; import org.apache.http.util.Args; @Immutable public class RequestTargetHost implements HttpRequestInterceptor { public void process(HttpRequest httpRequest, HttpContext httpContext) throws HttpException, IOException { Args.notNull(httpRequest, "HTTP request"); HttpCoreContext adapt = HttpCoreContext.adapt(httpContext); ProtocolVersion protocolVersion = httpRequest.getRequestLine().getProtocolVersion(); if ((!httpRequest.getRequestLine().getMethod().equalsIgnoreCase("CONNECT") || !protocolVersion.lessEquals(HttpVersion.HTTP_1_0)) && !httpRequest.containsHeader(HTTP.TARGET_HOST)) { HttpHost httpHost; HttpHost targetHost = adapt.getTargetHost(); if (targetHost == null) { HttpConnection connection = adapt.getConnection(); if (connection instanceof HttpInetConnection) { InetAddress remoteAddress = ((HttpInetConnection) connection).getRemoteAddress(); int remotePort = ((HttpInetConnection) connection).getRemotePort(); if (remoteAddress != null) { httpHost = new HttpHost(remoteAddress.getHostName(), remotePort); if (httpHost == null) { if (!protocolVersion.lessEquals(HttpVersion.HTTP_1_0)) { throw new ProtocolException("Target host missing"); } return; } } } httpHost = targetHost; if (httpHost == null) { if (!protocolVersion.lessEquals(HttpVersion.HTTP_1_0)) { throw new ProtocolException("Target host missing"); } return; } } httpHost = targetHost; httpRequest.addHeader(HTTP.TARGET_HOST, httpHost.toHostString()); } } }