CloseableHttpClient简单使用实例[通俗易懂]

importjava.io.BufferedReader;importjava.io.IOException;importjava.nio.charset.Charset;importjava.security.KeyManagementException;importjava.security.KeyStoreException;importjava.security.NoSuchAlgorithmException;importjavax.net.ssl.SSLContext

大家好,又见面了,我是你们的朋友全栈君。

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;

import javax.net.ssl.SSLContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.StatusLine;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.tomcat.util.codec.binary.Base64;

import com.alibaba.fastjson.JSONObject;

/**
 * @author zxs
 *
 */
public class DoubleRecordService extends HttpServlet{

    
    /**
     * 
     */
    private static final long serialVersionUID = 517441780092540387L;
        
    static String httpProtocol = 请求协议;
    static String username = 账号”;
    static String password = 账号对应的密码;(本文使用md5解密后登陆)
    static String ip = “服务地址”;
    static int port = 服务端口; 
    static HttpHost target = null;
    static CloseableHttpClient httpSSlClient = null;
    /**
     * 获取受信任httpClient
     * 
     * @return
     */
    public static CloseableHttpClient createSSLClientDefault() {

        if (target == null)
            target = new HttpHost(ip, port, httpProtocol);
        if (httpSSlClient != null)
            return httpSSlClient;
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(new AuthScope(target.getHostName(), target.getPort()),
                new UsernamePasswordCredentials(username, GetMD5.GetMD5Code(password)));
        SSLContext sslContext;

        try {

            sslContext = new SSLContextBuilder().loadTrustMaterial(null, (certificate, authType) -> true).build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[] { “TLSv1.2” },
                    null, new NoopHostnameVerifier());
            httpSSlClient = HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultCredentialsProvider(credsProvider)
                    .build();
            return httpSSlClient;
        } catch (KeyManagementException e) {

            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {

            e.printStackTrace();
        } catch (KeyStoreException e) {

            e.printStackTrace();
        }
        return null;
    }
    
    
    /**
     * @param jsonObject
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     */
    public static String singleCheck(JSONObject jsonObject)
            throws ClientProtocolException, IOException {

        CloseableHttpClient httpclient = createSSLClientDefault();
        String data = null;
        try {

            HttpClientContext localContext = HttpClientContext.create();
            HttpPost httpPost = new HttpPost(httpProtocol + “://” + ip + “:” + port + “/join/singleCheck”);
            System.out.println(httpProtocol + “://” + ip + “:” + port + “/join/singleCheck”);
            RequestConfig config = RequestConfig.custom().setConnectTimeout(50000).setSocketTimeout(50000).build();
            httpPost.setConfig(config);
            httpPost.setHeader(HTTP.TARGET_HOST,”相应ip地址”);
            String body = jsonObject.toJSONString();
            System.out.println(“参数:”+body);
            httpPost.setHeader(“Content-Type”, “application/json”);
            StringEntity stringEntity = new StringEntity(body, “UTF-8”);// 解决中文乱码问题
            stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, “application/json;charset=utf8”));
            httpPost.setEntity(stringEntity);
            CloseableHttpResponse response = httpclient.execute(target, httpPost, localContext);
            try {

                StatusLine tLine = response.getStatusLine();
                System.out.println(tLine);
                HttpEntity entity = response.getEntity();
                data = IOUtils.toString(entity.getContent(), “UTF-8”);
                System.out.println(data);
            } finally {

                response.close();
            }
        } finally {

//            httpclient.close();
        }
        return data;
    }
    /**
       * 构造Basic Auth认证头信息
       * 
       * @return
       */
    private String getHeader() {

            String auth = username + “:” + GetMD5.GetMD5Code(password);
            byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName(“US-ASCII”)));
            String authHeader = “Basic ” + new String(encodedAuth);
            return authHeader;    
    }
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127773.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IC验证培训——SystemVerilog通用程序库(下)

    IC验证培训——SystemVerilog通用程序库(下)路桑的个人网址:路科验证-IC验证培训-数字芯片验证五、类方法还是包函数?我们最初的直觉是将svlib作为一组SystemVerilog类呈现给用户。我们假设由一个类来表示一个正则表达式,另一个类来表示一个文件名,等等。从库写作者的角度来看,以这种方式打包用户数据是非常有吸引力的,因为它允许我们将任意隐藏数据与每个对象相关联。 我们在编写面向用户的API时,上遇到了一个严…

  • 关于AD域的介绍

    关于AD域的介绍关于AD域第一次写博客,记录一下如何搭建自己的域服务器,以及其中遇到的一些问题,感谢“我的bug我做主”的文章《C#实现AD域验证登录(一)》,为防止原文被作者删除,手动将原文复制下来,如有侵权,请及时告知。域的简单介绍为什么要使用域?假设你是公司的系统管理员,你们公司有一千台电脑。如果你要为每台电脑设置登录帐户,设置权限(比如是否允许登录帐户安装软件),那你要分别坐在这一千台电脑前工作。如…

  • arping命令用法

    arping命令用法arping命令使用说明BusyBoxv1.17.3(2011-07-2017:01:30CST)multi-callbinary.Usage:arping[-fqbDUA][-cCNT][-wTIMEOUT][-IIFACE][-sSRC_IP]DST_IPSendARPrequests/repliesOptions: -f Quiton…

  • log4j使用教程_log4js

    log4j使用教程_log4js简介Log4J是Apache的一个开源项目(官网http://jakarta.apache.org/log4j),通过在项目中使用Log4J,我们可以控制日志信息输出到控制台、文件、GUI组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。组成Log4J主要由Loggers(日志记录器)、Ap…

  • phcharm激活码(最新序列号破解)

    phcharm激活码(最新序列号破解),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • MATLAB fmincon 的初值x0的选取问题[通俗易懂]

    MATLAB fmincon 的初值x0的选取问题[通俗易懂]问题描述:在使用fmincon求解局部(全局)最优值时,我们需要在fmincon函数中输入初值x0,那么这个初值是否要像原始的牛顿法一样初值必须在可行域内(严格可行)?MATLAB在Document(https://cn.mathworks.com/help/optim/ug/fmincon.html?s_tid=doc_ta)中是这样描述的:大译:初始点为实值(fmincon只…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号