我正在尝试从使用Apache httpclient进行基本身份验证的HTTPS服务器获取一些数据(json数据 - > restful server)。 SSL证书是自签名的。 服务器对浏览器调用响应非常好,并且在使用curl时也是如此。
然而,使用java Apache httpclient,这是另一个故事。
客户端:
基本身份验证正在运行:如果忘记授权标头或者我设置了错误的base64编码登录密码,服务器会向我发送401错误。
https / SSL部分正在运行:我成功从在线restful json服务器获取数据但遗憾的是找不到具有基本身份验证的在线restful json服务器以进行测试......
try {
CloseableHttpClient httpClient = null;
try {
httpClient = HttpClients.custom()
.setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
.loadTrustMaterial(null, new TrustSelfSignedStrategy())
.build()
)
)
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.build();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
HttpGet getRequest = new HttpGet("https://localhost:5050/getdata");
getRequest.addHeader("Accept", "*/*");
getRequest.addHeader("Authorization", "Basic UBJ0aHVyOmFo0XElYHU=");
HttpResponse response = httpClient.execute(getRequest);
调试告诉我:
Caused by: org.apache.http.ProtocolException: The server failed to respond with a valid HTTP response
真!它不是我想要的有效HTTP响应,它是一个有效的HTTP S 响应!
我想我错过了什么......
答案 0 :(得分:2)
<强> 解决! 强>
错误来自服务器端:我的回复中没有包含任何标题....
httpclient似乎喜欢来自服务器的良好响应。对于浏览器或curl来说,情况并非如此:垃圾可以接收,显示它们!