Hello, We have a confirmed bug report :
- https://bz.apache.org/bugzilla/show_bug.cgi?id=62852 It appears that when using proxy for a request, the method request.getRequestHeaders() called on the request returned HttpContext#getAttribute(HttpCoreContext.HTTP_REQUEST) returns only part of the headers. While it returns them all if not using proxy. See: - https://github.com/apache/jmeter/blob/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPHC4Impl.java#L580 I tried to reproduce behavior with HTTPClient only but couldn't , so it seems issue is somewhere in our code possibly due to interceptors or request executor. /* * ==================================================================== * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.jmeter.protocol.http.proxy; import java.util.Arrays; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.protocol.HttpCoreContext; /** * How to send a request via proxy. * * @since 4.0 */ public class TestProxy { public static void main(String[] args)throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpHost target = new HttpHost("jmeter.apache.org", 80, "http"); HttpHost proxy = new HttpHost("localhost", 8888, "http"); RequestConfig config = RequestConfig.custom() .setProxy(proxy) .build(); HttpGet request = new HttpGet("/"); request.addHeader("X-sleep", "5"); request.setConfig(config); System.out.println("Executing request " + request.getRequestLine() + " to " + target + " via " + proxy); HttpContext localContext = new BasicHttpContext(); CloseableHttpResponse response = httpclient.execute(target, request, localContext); final HttpRequest httpRequestFromLocalContext = (HttpRequest) localContext.getAttribute(HttpCoreContext.HTTP_REQUEST); try { System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); System.out.println(Arrays.asList(request.getAllHeaders())); System.out.println(Arrays.asList(httpRequestFromLocalContext.getAllHeaders())); System.out.println(Arrays.asList(response.getAllHeaders())); //System.out.println(EntityUtils.toString(response.getEntity())); } finally { response.close(); } } finally { httpclient.close(); } } } OUTPUT: ---------------------------------------------------------------------------------------------------- Executing request GET / HTTP/1.1 to http://jmeter.apache.org:80 via http://localhost:8888 ---------------------------------------- HTTP/1.1 200 OK [X-sleep: 5] [X-sleep: 5, Host: jmeter.apache.org:80, Proxy-Connection: Keep-Alive, User-Agent: Apache-HttpClient/4.5.6 (Java/1.8.0_161), Accept-Encoding: gzip,deflate] [Date: Thu, 13 Dec 2018 22:23:23 GMT, Server: Apache/2.4.18 (Ubuntu), Last-Modified: Sun, 09 Sep 2018 15:25:54 GMT, ETag: "3159-57571db50c67a-gzip", Accept-Ranges: bytes, Vary: Accept-Encoding, Keep-Alive: timeout=30, max=100, Connection: Keep-Alive, Content-Type: text/html, Content-Length: 12633] ---------------------------------------------------------------------------------------------------- Regards Philippe M. <https://www.openstreetmap.org/#map=18/50.69454/3.16455>
