当前位置: 首页 > 面试题库 >

使用apache httpClient客户端将发布数据发送到https而无需ssl证书验证

胥玮
2023-03-14
问题内容

我需要使用apache HttpClient包将发布数据发送到https url,

发送帖子数据后,我需要检索html数据。

我要发送的帖子数据是XML字符串,而我正在接收的帖子数据是XML字符串。

任何有关此问题的信息将不胜感激。

我用谷歌搜索,并在互联网上找到了使用DefaultHttpClient的示例,现在版本4已弃用。所以我想知道如何正确使用客户端的新版本。

谢谢。

public String sendPost(final String request, final String postData) throws ClientProtocolException, IOException  {
    String result = null;
    CloseableHttpClient httpclient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost(request);
    CloseableHttpResponse response = httpclient.execute(httpPost);
    try {
        HttpEntity entity = response.getEntity();
        result = EntityUtils.toString(entity);
        EntityUtils.consume(entity);
    } finally {
        response.close();
    }
    return result;

}

到目前为止,我想到了this函数,该函数发送请求并从响应中检索字符串。我认为应该可以。我所缺少的是我对postData不做任何事情。如何发送带有请求的帖子数据?


问题答案:
public String sendPost(final String request, final String postData) throws ClientProtocolException, IOException, NoSuchAlgorithmException, KeyManagementException  {
    String result = null;
    SSLContext sslContext = SSLContext.getInstance("SSL");

    // set up a TrustManager that trusts everything
    sslContext.init(null, new TrustManager[] { new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                        System.out.println("getAcceptedIssuers =============");
                        return null;
                }

                public void checkClientTrusted(X509Certificate[] certs,
                                String authType) {
                        System.out.println("checkClientTrusted =============");
                }

                public void checkServerTrusted(X509Certificate[] certs,
                                String authType) {
                        System.out.println("checkServerTrusted =============");
                }
    } }, new SecureRandom());

    CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(new SSLSocketFactory(sslContext)).build();
    HttpPost httpPost = new HttpPost(request);
    ByteArrayEntity postDataEntity = new ByteArrayEntity(postData.getBytes());
    httpPost.setEntity(postDataEntity);
    CloseableHttpResponse response = httpclient.execute(httpPost);
    try {
        HttpEntity entity = response.getEntity();
        result = EntityUtils.toString(entity);
        EntityUtils.consume(entity);
    } finally {
        response.close();
    }
    return result;

}


 类似资料:
  • 我是Netty的新手,我尝试编写一个使用相互身份验证的echo服务器和客户端。不幸的是,它无法工作,客户端没有发送其客户端证书,服务器按预期断开连接。下面是我到目前为止所做的工作和客户端代码的概述--它可能包含一些bug或者我错过了一些重要的东西。谢谢你经历了这一切! 这就是我所拥有的: Netty版本4.1.0.cr1 可在服务器上下载的有效密钥存储库、信任存储库和CRL 直接使用JSSE的ec

  • 我在服务器中部署了基于soap的cxf服务服务器,在不同的服务器中部署了基于soap的cxf服务客户端。这两个服务器都具有有效的SSL证书。在不同的场景中,两者都充当客户机和服务器。现在我通过服务器调用客户端服务,tomcat并没有向客户端发送服务器证书。那么tomcat是否有任何配置或jvm来向客户端发送ssl证书呢。请帮帮我。 我添加了JAVA_选项的更多细节 -贾瓦克斯。网调试=ssl -贾

  • 问题内容: 我正在使用Java 6,并尝试使用客户端证书针对远程服务器创建一个。 服务器正在使用自签名的根证书,并且要求提供受密码保护的客户端证书。我已将服务器根证书和客户端证书添加到在中找到的默认Java密钥库中。密钥库文件的名称似乎表明不应将客户端证书放入其中? 无论如何,将根证书添加到此存储解决了臭名昭著的问题 但是,我现在停留在如何使用客户端证书上。我尝试了两种方法,但都无济于事。 首先,

  • 问题内容: 我还很陌生,对于使用证书进行身份验证时客户端应该显示的内容有些困惑。 我正在编写一个Java客户端,该客户端需要对POST特定对象进行简单的数据处理URL。那部分工作正常,唯一的问题是应该完成。该部分相当容易处理(无论是使用Java的内置HTTPS支持还是使用Java的内置支持),但是我一直坚持使用客户端证书进行身份验证。我注意到这里已经存在一个非常类似的问题,我还没有尝试使用我的代码

  • 我正在使用Datagramsocket和DatagramPacket制作一个简单的server_client应用程序。我想做的是:一个客户端将数据发送到服务器,服务器将这些数据发送到另一个客户端。问题是服务器从第一个客户端接收数据,但不将它们发送到另一个客户端,我怎么知道我将发送到的客户端的端口?端口没有改变吗? 这是客户端类: 服务器类: }