我想通过HTTPS通过代理请求GET。代理服务器回复400:错误请求。我用wireshark嗅探了数据,并且我看到,标题没有设置。由于安全性,我用<>括号替换了一些值。任何人都可以帮忙吗?Apache HTTPClient头没有正确设置
这是我的实现的一部分:
String urlString = ctx.getUrl();
HttpHost target;
CloseableHttpClient httpclient;
HttpClientContext localContext;
try
{
CredentialsProvider credsProvider = new BasicCredentialsProvider();
int proxyport = Integer.parseInt(ctx.getProxyPort());
credsProvider.setCredentials(
new AuthScope(<MyProxyUrl>, <MyProxyPort>),
new UsernamePasswordCredentials(<MyProxyUser>, <MyProxyPassword>));
httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
target = new HttpHost(urlString, 443, "https");
HttpHost proxy = new HttpHost(<MyProxyUser>, <MyProxyPassword>);
RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
request = new HttpGet("/");
request.setURI(new URI(urlString));
//this method sets different header
HttpProperty.setHeaders(request, ctx);
request.setConfig(config);
HttpResponse response = httpclient.execute(target, request);
我在与请求跟踪的头和印有低于输出名称/值:
Header[] headers = request.getAllHeaders();
标题名:的Proxy-连接
标题值:关闭
标题名称:Proxy-Au thorization
标头值:基本
标题名称:用户代理
标头值:mydevice在
标题名称:接受
标头值:text/html的
在至少这是回应: 内容长度responesCode:0 400
从我发现的Wireshark嗅探中发现,当发送CONNECT时,请求内部的头部没有被设置。
我重视这样的画面:
编辑: 谢谢达米安Nikodem, 但我找到了解决办法。 第一个请求总是在没有用户标题的情况下发送。 我改变了两件事,代理授权的作品: request = new HttpGet(urlString); HttpResponse response = httpclient.execute(request);
IM太困提供一个合适的回答,但对于这样的问题,我会建议一个叫查尔斯·互联网代理(其litrally像这样的调试问题的完美工具,甚至是跨HTTPS)工具 – 2015-02-11 12:11:43
我在使用外部工具时非常有限,因为我的应用程序在嵌入式系统上运行。 – Thorgas 2015-02-11 12:37:24