Java tutorial
package org.apache.http.protocol; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpException; 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 RequestContent implements HttpRequestInterceptor { private final boolean overwrite; public RequestContent() { this(false); } public RequestContent(boolean z) { this.overwrite = z; } public void process(HttpRequest httpRequest, HttpContext httpContext) throws HttpException, IOException { Args.notNull(httpRequest, "HTTP request"); if (httpRequest instanceof HttpEntityEnclosingRequest) { if (this.overwrite) { httpRequest.removeHeaders(HTTP.TRANSFER_ENCODING); httpRequest.removeHeaders(HTTP.CONTENT_LEN); } else if (httpRequest.containsHeader(HTTP.TRANSFER_ENCODING)) { throw new ProtocolException("Transfer-encoding header already present"); } else if (httpRequest.containsHeader(HTTP.CONTENT_LEN)) { throw new ProtocolException("Content-Length header already present"); } ProtocolVersion protocolVersion = httpRequest.getRequestLine().getProtocolVersion(); HttpEntity entity = ((HttpEntityEnclosingRequest) httpRequest).getEntity(); if (entity == null) { httpRequest.addHeader(HTTP.CONTENT_LEN, "0"); return; } if (!entity.isChunked() && entity.getContentLength() >= 0) { httpRequest.addHeader(HTTP.CONTENT_LEN, Long.toString(entity.getContentLength())); } else if (protocolVersion.lessEquals(HttpVersion.HTTP_1_0)) { throw new ProtocolException("Chunked transfer encoding not allowed for " + protocolVersion); } else { httpRequest.addHeader(HTTP.TRANSFER_ENCODING, HTTP.CHUNK_CODING); } if (!(entity.getContentType() == null || httpRequest.containsHeader(HTTP.CONTENT_TYPE))) { httpRequest.addHeader(entity.getContentType()); } if (entity.getContentEncoding() != null && !httpRequest.containsHeader(HTTP.CONTENT_ENCODING)) { httpRequest.addHeader(entity.getContentEncoding()); } } } }