Java tutorial
/******************************************************************************* * Copyright (c) 2011 Subgraph. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subgraph - initial API and implementation ******************************************************************************/ package com.subgraph.vega.internal.http.requests; import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpException; import org.apache.http.HttpMessage; import org.apache.http.HttpRequest; import org.apache.http.HttpRequestInterceptor; import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHttpEntityEnclosingRequest; import org.apache.http.message.BasicHttpRequest; import org.apache.http.protocol.HttpContext; /** * Create a copy of the request which contains the headers which are actually sent. */ public class RequestCopyHeadersInterceptor implements HttpRequestInterceptor { @Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { final HttpRequest copy = copyRequest(request); context.setAttribute(HttpRequestEngine.VEGA_SENT_REQUEST, copy); } private HttpRequest copyRequest(HttpRequest request) { if (request instanceof HttpEntityEnclosingRequest) return copyEntityEnclosingRequest((HttpEntityEnclosingRequest) request); else return copyBasicRequest(request); } private HttpRequest copyEntityEnclosingRequest(HttpEntityEnclosingRequest request) { final BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest(request.getRequestLine()); r.setEntity(request.getEntity()); copyHeaders(request, r); return r; } private HttpRequest copyBasicRequest(HttpRequest request) { if (request == null) return null; final HttpRequest r = new BasicHttpRequest(request.getRequestLine()); copyHeaders(request, r); return r; } private static void copyHeaders(HttpMessage from, HttpMessage to) { for (Header h : from.getAllHeaders()) to.addHeader(new BasicHeader(h.getName(), h.getValue())); } }