Hello Oleg,
Felix has created a JUnit test that shows our issue:
- We use localhost:8888 as proxy
- And https://jmeter.apache.org is the target site
Note that in JMeter we use the HttpRequest from HttpContext as it contains
all the headers :
- [Host: jmeter.apache.org:443, User-Agent: Apache-HttpClient/4.5.6
(Java/1.8.0_161)]
- It should also contains X-sleep: 5 but as you will see, it doesn't
@Test
public void checkThatHeadersAreNotHidden() throws Exception {
TrustStrategy trustStrategy = new TrustAllStrategy();
SSLContext sslContext = new
SSLContextBuilder().loadTrustMaterial(null, trustStrategy).build();
SSLConnectionSocketFactory socketFactory = new
SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpclient =
HttpClients.custom().setSSLSocketFactory(socketFactory).build();
try {
HttpHost target = new HttpHost("jmeter.apache.org", 443,
"https");
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);
HttpContext localContext = new BasicHttpContext();
CloseableHttpResponse response = httpclient.execute(target,
request, localContext);
final HttpRequest httpRequestFromLocalContext = (HttpRequest)
localContext
.getAttribute(HttpCoreContext.HTTP_REQUEST);
try {
Assert.assertThat(httpRequestFromLocalContext.getRequestLine().getMethod(),
CoreMatchers.is("CONNECT"));
Assert.assertThat(response.getStatusLine().getStatusCode(),
CoreMatchers.is(200));
Assert.assertThat(Arrays.asList(request.getAllHeaders()).toString(),
CoreMatchers.containsString("X-sleep"));
Assert.assertThat(Arrays.asList(httpRequestFromLocalContext.getAllHeaders()).toString(),
CoreMatchers.containsString("X-sleep"));
} finally {
response.close();
}
} finally {
httpclient.close();
}
}
On Sat, Dec 15, 2018 at 2:35 PM Oleg Kalnichevski <[email protected]> wrote:
> On Sat, 2018-12-15 at 00:40 +0100, Philippe Mouawad wrote:
> > Hello ,
> > As a complement if you read the thread.
> > It appears TestProxy doesn’t enter in Tunnel_target mode while JMeter
> > does
> > which triggers the issue.
> >
> > How can I make HttpClient enter this mode using TestProxy code (in
> > thread)
> > below so that I can provide a reproducer for issue?
>
> You need to make sure the route is marked as TunnelType.TUNNELLED.
> Secure `https` routes are marked TunnelType.TUNNELLED by default.
>
> Oleg
>
>
> > I tried debugging but I don’t understand, it seems it depends on
> > number of
> > Hop in httpRoute, but javadocs is very succinct.
> >
> > Thanks
> >
> > On Friday, December 14, 2018, Philippe Mouawad <[email protected]>
> > wrote:
> >
> > > Hello,
> > > We have a bug report at JMeter where request headers are lost when
> > > a proxy
> > > is used for a request.
> > >
> > > You can see thread discussion here:
> > >
> > > http://mail-archives.apache.org/mod_mbox/jmeter-dev/
> > >
> 201812.mbox/%[email protected]
> > > %3e
> > >
> > >
> > > It seems hc4 swaps the request stored in local context leading to
> > > the
> > > issue.
> > >
> > >
> > > Regards
> > >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
--
[image: logo Ubik Ingenierie] <https://www.ubik-ingenierie.com> Philippe
Mouawad
320914981 <+33320914981> | [email protected]
[image: ubik-ingenierie.com] ubik-ingenierie.com
<https://www.ubik-ingenierie.com> | [image: 03.20.91.49.81] 03.20.91.49.81
<+33320914981> | [image: 23 rue du chemin de fer , 59100 , Roubaix] 23 rue
du chemin de fer, 59100, Roubaix
<https://www.openstreetmap.org/#map=18/50.69454/3.16455>