现在请帮助,我想通过SOAP调用一个api,并使用httpclient 4.5.5
static String callApi(String url, String requestXml)
{
String responseXml = "";
CloseableHttpClient httpClient = null;
HttpPost httpPost;
try
{
httpClient = HttpClients.createDefault();
httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "text/xml; charset=utf-8");
httpPost.setHeader("x-ibm-client-id", Config.csp.validKey);
StringEntity entiry = new StringEntity(requestXml, "UTF-8");
httpPost.setEntity(entiry);
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
responseXml = EntityUtils.toString(entity, "UTF-8");
}
catch (Exception ex)
{
log.error("", ex);
}
finally
{
try
{
if (httpClient != null)
httpClient.close();
}
catch (Exception ex)
{
log.error("", ex);
}
}
return responseXml;
}
您没有显示如何调用callapi()
,但我猜您使用的是10.xx.xx.xx
IP地址而不是证书中包含的名称来寻址主机。
当主机名验证生效时,您不能这样做。
最好改为通过证书通用名或主题替代名(SAN)之一对其进行寻址。但是,如果您不能做到这一点,并且由于10.*
IP地址范围是专用网络,您可能可以安全地关闭此服务器到服务器调用的主机名验证。
httpClient = HttpClients.createDefault();
httpClient = HttpClients
.custom()
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.build();
根据所使用的Apache HttpClient的版本,语法可能略有不同。
这将禁用安全控件。当调用您无法控制的网络上的主机时,不要这样做。
问题内容: 在Python中,我使用了这样的请求: 非常简单。 现在,我需要使用Apache HttpClient在Java中实现相同的功能。使用HttpClient进行请求时如何通过客户端证书? 问题答案: 我认为主要区别在于,在Java中,通常将密钥和证书放在密钥存储区中,然后从那里使用它。就像您提到的那样,人们经常希望为此使用单独的库,例如提到的httpcomponents客户端(就像您在p
问题内容: 我知道,关于这个问题有很多不同的问题和很多答案…但是我听不懂… 我已经:从关闭“按原样”安装了ubuntu-9.10-desktop-amd64 + NetBeans6.7.1。代表 我需要通过HTTPS连接到某个站点。为此,我使用Apache的HttpClient。 从教程中我读到: “一旦正确安装了JSSE,通过SSL的安全HTTP通信就应该 与普通HTTP通信一样简单。” 还有一
我想使用客户端证书对每个目录的身份验证进行故障排除。我特别想知道服务器发送哪些可接受的客户端证书。 如何调试SSL握手,最好使用cURL?
我使用的是Apache httpclient 4.3.6和httpcore 4.3.3(与opensaml 3.3.0捆绑)。我试图通过HTTPS通过代理获取网页,但每次都会收到SocketTimeoutException。HTTP连接工作正常。具体的超时并不重要;它只是需要更长的时间才能以更高的值失败。 示例代码: 尝试连接到代理时引发异常。堆栈跟踪是 这看起来很像Apache问题HTTPCLI
问题内容: 我一直在尝试使用curl登录barnesandnoble.com移动网站,到目前为止还没有运气。我返回的页面没有任何错误,它再次将我的电子邮件默认设置为登录页面的电子邮件输入表单框(使用print $ result返回的表单)。 通过更改LOGINURL指向eBay的登录名,相同的代码实际上可以使我正确地进入ebay。 唯一的区别是barnesandnobles是https://,而e
我将Jetty的HttpClient设置为使用SSL连接到apache http server,它将请求作为http路由到web服务器: HttpClient<--HTTPS->http server<--HTTP->web服务器。 此安装程序已运行了一段时间。 我现在正在尝试添加代理: HttpClient<---HTTPS using CONNECT Method-->proxy<---HTT