Httpclient最新工具包 可以过HTTPS验证

支持https但不验证证书的HttpClient import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStore 阅读详情

Pom.xml

        <httpclient.version>4.3.5</httpclient.version>  
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>${httpclient.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>${httpclient.version}</version>
        </dependency>

工具类

package com.chaojimanong.os.Service.common;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.net.ssl.SSLContext;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpException;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.cookie.Cookie;
import org.apache.http.cookie.CookieOrigin;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.FormBodyPart;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.impl.cookie.BestMatchSpec;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.cloudmapbj.os.entity.common.HttpResult;


class AnyTrustStrategy implements TrustStrategy{

    @Override
    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        return true;
    }

}

public class HttpUtil {

    private static final Log log= LogFactory.getLog(HttpUtil.class);

    private static int bufferSize= 1024;

    private static volatile HttpUtil instance;

    private ConnectionConfig connConfig;

    private SocketConfig socketConfig;

    private ConnectionSocketFactory plainSF;

    private KeyStore trustStore;

    private SSLContext sslContext;

    private LayeredConnectionSocketFactory sslSF;

    private Registry<ConnectionSocketFactory> registry;

    private PoolingHttpClientConnectionManager connManager;

    private volatile HttpClient client;

    private volatile BasicCookieStore cookieStore;

    public static String defaultEncoding= "utf-8";

    private static final String SECURED_URI = "";//远程加密认证地址


    public HttpResponse get(String uri) throws Exception {
        return doGetLogin(uri, null);
    }
    private static List<NameValuePair> paramsConverter(Map<String, Object> params){
        List<NameValuePair> nvps = new LinkedList<NameValuePair>();
        Set<Entry<String, Object>> paramsSet= params.entrySet();
        for (Entry<String, Object> paramEntry : paramsSet) {
            nvps.add(new BasicNameValuePair(paramEntry.getKey(), paramEntry.getValue().toString()));
        }
        return nvps;
    }

    public static String readStream(InputStream in, String encoding){
        if (in == null){
            return null;
        }
        try {
            InputStreamReader inReader= null;
            if (encoding == null){
                inReader= new InputStreamReader(in, defaultEncoding);
            }else{
                inReader= new InputStreamReader(in, encoding);
            }
            char[] buffer= new char[bufferSize];
            int readLen= 0;
            StringBuffer sb= new StringBuffer();
            while((readLen= inReader.read(buffer))!=-1){
                sb.append(buffer, 0, readLen);
            }
            inReader.close();
            return sb.toString();
        } catch (IOException e) {
            log.error("读取返回内容出错", e);
        }
        return null;
    }

    private HttpUtil(){
        //设置连接参数
        connConfig = ConnectionConfig.custom().setCharset(Charset.forName(defaultEncoding)).build();
        socketConfig = SocketConfig.custom().setSoTimeout(100000).build();
        RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create();
        plainSF = new PlainConnectionSocketFactory();
        registryBuilder.register("http", plainSF);
        //指定信任密钥存储对象和连接套接字工厂
        try {
            trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            sslContext = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, new AnyTrustStrategy()).build();
            sslSF = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            registryBuilder.register("https", sslSF);
        } catch (KeyStoreException e) {
            throw new RuntimeException(e);
        } catch (KeyManagementException e) {
            throw new RuntimeException(e);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
        registry = registryBuilder.build();
        //设置连接管理器
        connManager = new PoolingHttpClientConnectionManager(registry);
        connManager.setDefaultConnectionConfig(connConfig);
        connManager.setDefaultSocketConfig(socketConfig);
        //指定cookie存储对象
        cookieStore = new BasicCookieStore();
        //构建客户端
         client= HttpClientBuilder.create().setDefaultCookieStore(cookieStore).setConnectionManager(connManager).build();
        HttpPost httpPost = new HttpPost(SECURED_URI);
        httpPost.addHeader("Accept-Charset", "UTF-8");
        //请求头设置账户密码     
        httpPost.addHeader("Authorization", "Basic " + new String(Base64.encodeBase64(("***" + ":" + "***").getBytes(Charset.forName("UTF-8"))), Charset.forName("UTF-8")));
        try {
            HttpResponse execute = client.execute(httpPost);
            System.out.println(execute.getStatusLine().getStatusCode());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static HttpUtil getInstance(){
        synchronized (HttpUtil.class) {
            if (HttpUtil.instance == null){
                instance = new HttpUtil();
            }
            return instance;
        }
    }

    public InputStream doGet(String url) throws URISyntaxException, ClientProtocolException, IOException{
        HttpResponse response= this.doGet(url, null);
        return response!=null ? response.getEntity().getContent() : null;
    }
    public HttpResult doGetBody(String url) throws URISyntaxException, ClientProtocolException, IOException{
        HttpResponse response= this.doGet(url, null);
        return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(
                response.getEntity(), "UTF-8"));
    }

    public String doGetForString(String url) throws URISyntaxException, ClientProtocolException, IOException{
        return HttpUtil.readStream(this.doGet(url), null);
    }

    public InputStream doGetForStream(String url, Map<String, Object> queryParams) throws URISyntaxException, ClientProtocolException, IOException{
        HttpResponse response= this.doGet(url, queryParams);
        return response!=null ? response.getEntity().getContent() : null;
    }

    public String doGetForString(String url, Map<String, Object> queryParams) throws URISyntaxException, ClientProtocolException, IOException{
        return HttpUtil.readStream(this.doGetForStream(url, queryParams), null);
    }

    /**
     * 基本的Get请求
     * @param url 请求url
     * @param queryParams 请求头的查询参数
     * @return
     * @throws URISyntaxException 
     * @throws IOException 
     * @throws ClientProtocolException 
     */
    public HttpResponse doGet(String url, Map<String, Object> queryParams) throws URISyntaxException, ClientProtocolException, IOException{
        HttpGet gm = new HttpGet();
        URIBuilder builder = new URIBuilder(url);
        //填入查询参数
        if (queryParams!=null && !queryParams.isEmpty()){
            builder.setParameters(HttpUtil.paramsConverter(queryParams));
        }
        gm.setURI(builder.build());
        return client.execute(gm);
    }
    public HttpResponse doGetLogin(String url, Map<String, Object> queryParams) throws URISyntaxException, ClientProtocolException, IOException{
        HttpGet gm = new HttpGet();
        URIBuilder builder = new URIBuilder(url);
        //填入查询参数
        if (queryParams!=null && !queryParams.isEmpty()){
            builder.setParameters(HttpUtil.paramsConverter(queryParams));
        }
        gm.setURI(builder.build());
        return client.execute(gm);
    }

    public InputStream doPostForStream(String url, Map<String, Object> queryParams) throws URISyntaxException, ClientProtocolException, IOException {
        HttpResponse response = this.doPost(url, queryParams, null);
        return response!=null ? response.getEntity().getContent() : null;
    }

    public String doPostForString(String url, Map<String, Object> queryParams) throws URISyntaxException, ClientProtocolException, IOException {
        return HttpUtil.readStream(this.doPostForStream(url, queryParams), null);
    }

    public InputStream doPostForStream(String url, Map<String, Object> queryParams, Map<String, Object> formParams) throws URISyntaxException, ClientProtocolException, IOException{
        HttpResponse response = this.doPost(url, queryParams, formParams);
        return response!=null ? response.getEntity().getContent() : null;
    }
    public HttpResult doPostForStreamBody(String url, Map<String, Object> queryParams, Map<String, Object> formParams) throws URISyntaxException, ClientProtocolException, IOException{
        HttpResponse response = this.doPost(url, queryParams, formParams);
        return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString(
                response.getEntity(), "UTF-8"));
    }

    public String doPostRetString(String url, Map<String, Object> queryParams, Map<String, Object> formParams) throws URISyntaxException, ClientProtocolException, IOException{
        return HttpUtil.readStream(this.doPostForStream(url, queryParams, formParams), null);
    }

    /**
     * 基本的Post请求
     * @param url 请求url
     * @param queryParams 请求头的查询参数
     * @param formParams post表单的参数
     * @return
     * @throws URISyntaxException 
     * @throws IOException 
     * @throws ClientProtocolException 
     */
    public HttpResponse doPost(String url, Map<String, Object> queryParams, Map<String, Object> formParams) throws URISyntaxException, ClientProtocolException, IOException{
        HttpPost pm = new HttpPost();
        URIBuilder builder = new URIBuilder(url);
        //填入查询参数
        if (queryParams!=null && !queryParams.isEmpty()){
            builder.setParameters(HttpUtil.paramsConverter(queryParams));
        }
        pm.setURI(builder.build());
        //填入表单参数
        if (formParams!=null && !formParams.isEmpty()){
            pm.setEntity(new UrlEncodedFormEntity(HttpUtil.paramsConverter(formParams)));
        }
        return client.execute(pm);
    }

    /**
     * 多块Post请求
     * @param url 请求url
     * @param queryParams 请求头的查询参数
     * @param formParts post表单的参数,支持字符串-文件(FilePart)和字符串-字符串(StringPart)形式的参数
     * @param maxCount 最多尝试请求的次数
     * @return
     * @throws URISyntaxException 
     * @throws ClientProtocolException 
     * @throws HttpException
     * @throws IOException
     */
    public HttpResponse multipartPost(String url, Map<String, Object> queryParams, List<FormBodyPart> formParts) throws URISyntaxException, ClientProtocolException, IOException{

        HttpPost pm= new HttpPost();
        URIBuilder builder = new URIBuilder(url);
        //填入查询参数
        if (queryParams!=null && !queryParams.isEmpty()){
            builder.setParameters(HttpUtil.paramsConverter(queryParams));
        }
        pm.setURI(builder.build());
        //填入表单参数
        if (formParts!=null && !formParts.isEmpty()){
            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            entityBuilder = entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            for (FormBodyPart formPart : formParts) {
                entityBuilder = entityBuilder.addPart(formPart.getName(), formPart.getBody());
            }
            pm.setEntity(entityBuilder.build());
        }
        return client.execute(pm);
    }

    /**
     * 获取当前Http客户端状态中的Cookie
     * @param domain 作用域
     * @param port 端口 传null 默认80
     * @param path Cookie路径 传null 默认"/"
     * @param useSecure Cookie是否采用安全机制 传null 默认false
     * @return
     */
    public Map<String, Cookie> getCookie(String domain, Integer port, String path, Boolean useSecure){
        if (domain == null){
            return null;
        }
        if (port==null){
            port= 80;
        }
        if (path==null){
            path="/";
        }
        if (useSecure==null){
            useSecure= false;
        }
        List<Cookie> cookies = cookieStore.getCookies();
        if (cookies==null || cookies.isEmpty()){
            return null;
        }

        CookieOrigin origin= new CookieOrigin(domain, port, path, useSecure);
        BestMatchSpec cookieSpec = new BestMatchSpec();
        Map<String, Cookie> retVal= new HashMap<String, Cookie>();
        for (Cookie cookie : cookies) {
            if(cookieSpec.match(cookie, origin)){
                retVal.put(cookie.getName(), cookie);               
            }
        }
        return retVal;
    }

    /**
     * 批量设置Cookie
     * @param cookies cookie键值对图
     * @param domain 作用域 不可为空
     * @param path 路径 传null默认为"/"
     * @param useSecure 是否使用安全机制 传null 默认为false
     * @return 是否成功设置cookie
     */
    public boolean setCookie(Map<String, String> cookies, String domain, String path, Boolean useSecure){
        synchronized (cookieStore) {
            if (domain==null){
                return false;
            }
            if (path==null){
                path= "/";
            }
            if (useSecure==null){
                useSecure= false;
            }
            if (cookies==null || cookies.isEmpty()){
                return true;
            }
            Set<Entry<String, String>> set= cookies.entrySet();
            String key= null;
            String value= null;
            for (Entry<String, String> entry : set) {
                key= entry.getKey();
                if (key==null || key.isEmpty() || value==null || value.isEmpty()){
                    throw new IllegalArgumentException("cookies key and value both can not be empty");
                }
                BasicClientCookie cookie= new BasicClientCookie(key, value);
                cookie.setDomain(domain);
                cookie.setPath(path);
                cookie.setSecure(useSecure);
                cookieStore.addCookie(cookie);
            }
            return true;
        }
    }

    /**
     * 设置单个Cookie
     * @param key Cookie键
     * @param value Cookie值
     * @param domain 作用域 不可为空
     * @param path 路径 传null默认为"/"
     * @param useSecure 是否使用安全机制 传null 默认为false
     * @return 是否成功设置cookie
     */
    public boolean setCookie(String key, String value, String domain, String path, Boolean useSecure){
        Map<String, String> cookies= new HashMap<String, String>();
        cookies.put(key, value);
        return setCookie(cookies, domain, path, useSecure);
    }
     /**
     * 传递json 本人用的这个 记得做判断
     * @param url
     * @param json
     * @return
     * @throws Exception
     */
    public HttpResult doPostForStreamEntity(String url, String json) throws Exception {
        HttpPost pm= new HttpPost();
        StringEntity stringEntity = new StringEntity((json), "UTF-8");
        stringEntity.setContentType("application/json");
        pm.setEntity(stringEntity);
        URIBuilder builder = new URIBuilder(url);
        pm.setURI(builder.build());
        HttpResponse execute = client.execute(pm);
        return new HttpResult(execute.getStatusLine().getStatusCode(), EntityUtils.toString(
                execute.getEntity(), "UTF-8"));
    }


}
HttpClient绕过HTTPS证书验证的实战指南与安全考量 本文详细介绍了在Java开发测试中,使用HttpClient绕过HTTPS证书验证的两种核心方法:自定义X509TrustManager和使用TrustStrategy。文章提供了完整的工具类代码和实战示例,并重点强调了该方法仅适用于非生产环境,深入剖析了在生产环境中禁用证书验证将面临中间人攻击等严重安全风险,给出了正确的安全实践建议。 阅读详情

相关推荐

HttpClient跳过HTTPS证书验证的3种安全实现方案

HTTPS证书验证是保障网络通信安全的核心机制,通过数字证书建立服务器身份信任链。其原理基于公钥基础设施(PKI),客户端验证服务器证书的签名链是否源自可信根证书机构。这一机制在开发测试中可能成为障碍,特别是在对接使用自签名证书的内部测试环境或老旧系统时。为提升开发效率,可在受控环境下临时绕过验证,但需严格隔离生产环境。本文聚焦Java生态中HttpClient组件的三种主流实现方案:通过自定义TrustManager实现底层控制、利用Apache HttpClient的SSLContextBuilder简

weixin_29325007的博客 281

通过httpClient动态爬取百度首页

httpClient介绍 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 j...

XING_Gou的博客 459

Windows Server 2019整机备份与异机还原实战:从虚拟机到物理机的完整迁移指南

本文详细介绍了Windows Server 2019整机备份与异机还原的实战操作,涵盖从虚拟机到物理机的完整迁移流程。通过环境准备、备份策略设计、具体操作步骤及迁移后优化等内容,帮助用户实现系统环境的无缝迁移,特别适用于服务器硬件升级、数据中心迁移等场景。

weixin_30555125的博客 133

[最新]简易版本Java HttpClient POST请求调用OpenAI(ChatGPT3/3.5/4)相关接口核心方法(附100个OpenAI/ChatGPT key)

当下,OpenAI 存在着许多令人惊叹的技术,如 ChatGPT3/3.5/4,它们能够生成高质量的文章、翻译语言、自动生成代码,并且在许多领域都取得了广泛的应用。本文将向您介绍如何使用 Java SpringBoot 调用 OpenAI 的 ChatGPT3/3.5/4 接口,并提供了 100 个 OpenAI/ChatGPT API key,让您的开发过程更加便捷。

NBA首席形象大使坤坤 8346

从DC到DCG:手把手教你搭建物理感知综合流程(含DEF文件处理避坑指南)

本文详细介绍了从Design Compiler(DC)过渡到DC Topographical(DCT)和DC Graphical(DCG)的完整操作框架,特别针对DEF文件处理提供避坑方案。通过环境准备、工具升级、DEF文件处理、DCG综合配置等步骤,帮助开发者高效应对28nm以下工艺节点的物理感知综合挑战,显著提升时序收敛效率。

weixin_27966471的博客 381

手把手教你用Python+GDAL处理0.5米吉林一号卫星影像(附代码)

本文详细介绍了如何使用Python和GDAL处理吉林一号0.5米高分辨率卫星影像,包括环境配置、数据预处理、分辨率融合、植被指数计算及地物分类等关键步骤。通过实战代码示例,帮助开发者高效处理大尺寸遥感数据,解决资源崩溃和算法选择问题,提升遥感影像分析能力。

weixin_30892037的博客 126

如何在项目中使用HttpClient工具包发送http请求

在讲解如何使用HttpClient工具包之前,先简单介绍一下:HttpClient 是Apache Jakarta Common 下的子项目,是一个支持http协议的客户端编程工具包,使用它可以高效便捷的快速访问不同的网址,发送http请求。在搭建spring项目时,难免会使用到其他第三方已经实现的API服务,比如搭建微信小程序可能会使用到的微信支付功能,地图的定位功能等。这是我们就需要向其他服务器发送HTTP请求来获取我们需要的数据信息。下面将详细讲述一下如何发送最简单的http请求。

weixin_44879791的博客 943

11-4 AEB 算法原理及系统组成

本专题旨在探讨如何利用仿真软件开发自动紧急制动系统AEB,主要通过整理开发流程,实现从需求到验证的全流程掌握,为后续开发提供支持;同时,研究了如何在汽车自动驾驶仿真工具中开发自己的算法,并解决了从ISO、E-CNAP、GB/T以及交通法规等提炼出功能需求的问题,以快速实现原型模型的开发。本专题重点讲解了AEB的工作原理、系统/软件架构和需求、算法模型及实现、CCRs/CCRb/CCRm建模与仿真、VRU-AEB-B/P/M建模与仿真,同时还提供了测试用例,期待将AEB算法成功地产品化。

AIgraphX 8552

HttpClient4.5详解

1.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 Http

木槿落空樱桃忽而 % 1m 4344

Tribon Vitesse开发教程(一)

Tribon Vitesse简介 Tribon Vitesse是Tribon提供给Python编程语言的编程接口,它是一系列的API。使用Python的语法调用这些API,结合Python语言自身的语法生成的程序叫做Vitesse程序。Vitesse是法语“速度”的意思,读作“为戴斯”。使用Tribon Vitesse可以直接访问Tribon产品信息模型和使用Tribon应用程序的功能,以控制设计

forevermemory的专栏 2593

Dell R730安装Windows Server 2008 R2

一、RAID驱动准备  在安装Windows server2008 R2操作系统时,如果没有发现硬盘,请将下面的阵列卡驱动先解压(在下载的.exe文件,双击点下一步会自动解压),解压后把那文件夹复制到U盘中。阵列卡 PERC9 H330 - H730 - H730P - H830 Controllers for Windows Server 2008 R2二、系统安装方法方法一:光盘安装  ①请您...

MarshLin 2万+

客户端编程工具包 HttpClient

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议

qq_46023503的博客 311

【Bug已解决】NCCL timeout for validation 解决方案

训练用多卡 DDP / FSDP 正常,但一到或者进程直接 hang 在 eval 的某个集合通信上。最迷惑的是:训练阶段(有集合通信)完全正常,偏偏 eval 阶段(看起来更轻量)超时。因为 eval 阶段某些 rank 没参与 collective,导致参与的那部分 rank 永远等不到同伴。

一键难忘的博客 142

HttpClient 入门与正确使用姿势

HttpClient 提供了一个高效,功能丰富的包实现最新的HTTP 标准的客户端。 一句话, HttpClient 是Java 语言中访问Http资源的强大的工具包。

oscar999的专栏 1212

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Httpclient调用短信验证码接口

一、简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。 下载地址: http://hc.apac...

weixin_43868049的博客 708

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

轻松把玩HttpClient之配置ssl,采用绕过证书验证实现https

上篇文章说道httpclient不能直接访问https的资源,这次就来模拟一下环境,然后配置https测试一下。在前面的文章中,分享了一篇自己生成并在tomcat中配置ssl的文章《Tomcat配置SSL》,大家可以据此来在本地配置https。我已经配置好了,效果是这样滴: 可以看到已经信任该证书(显示浅绿色小锁),浏览器可以正常访问。现在我们用代码测试一下: public st

崔成龙 . 勇往直前 7万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

HttpClient配置SSL绕过https证书

HttpClient简介HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子

irokay的专栏 6万+

Android中HttpClient请求https的验证过程

前言: 好久没更新了,最近遇到一些很心烦的事情,既然心烦索性在这里就不提了。 HttpClient请求https应该加的一些处理: 1.在你的包里面添加一个类: package com.xxx.x.common; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostExcep

比较喜欢、笑的博客专栏 2543

java HttpClient绕过https的ssl证书验证

我在另一篇文章里也有描述,因为标题是描述另一个问题的,所以再起一篇文章https://blog.youkuaiyun.com/qq_36951116/article/details/91493376 https请求时绕过ssl证书验证: /** * 绕过验证 * * @return * @throws NoSuchAlgorithmException *...

祁东握力的博客 3086

Android:Https跳过证书验证、Https使用证书、HttpClient、

在公司用习惯了Http请求,突然要用到Https请求,因为突然换了我太不习惯,在第三方网络请求发现无用时,我开始使用原生的网络请求,突然发现完全不会Https请求。结果一段时间的总结与使用,我把这期间的使用心得发布到csdn,为了是总结知识点和广大程序猿方便。 一、跳过验证: 既然叫跳过证书验证,那么我们在使用网络请求之前,就应该使用一定的手段来跳过验证。 1、首先得重写org.apache

ff的博客 9388

Https请求忽略证书验证最新实现

最近工作中需要和一个第三方公司进行https交互请求,但是对方的证书有一些问题,所以在发送请求的时候需要忽略证书验证。百度之后,发现已经有很多这方面的介绍,不过在使用其代码的时候总会有一些类不推荐使用了。下面是参考网上的常见方面并结合最新的官方API实现的一个最新方法(使用的主要jar包括httpclient-4.5.1.jar和httpcore-4.4.3.jar)。 public stat

点滴成长 1万+

HttpClient可以直接请求https,为何要绕过ssl证书验证?

本程序使用的HttpClient版本: httpclient4.5.2 一个有意思的现象,看下面这段获取百度首页代码的HttpClient请求: importjava.io.IOException; importorg.apache.http.HttpEntity; importorg.apache.http.client.methods.CloseableHttpResponse; importorg.apache.http.client.methods.HttpGet; im...

xiaozhuangyumaotao的博客 2003

java httpclient跳过https证书验证

httpclien调用skipHttpsUtil得wrapClient方法跳过https证书验证 SkipHttpsUtil skipHttpsUtil=new SkipHttpsUtil(); CloseableHttpClient httpclient = null; CloseableHttpResponse r...

diewei7214的博客 897

HttpClient 进行 HTTPS 接口调用

因公司需求访问客户的接口去获取数据 我首先使用了普通的http工具类去访问,得到这种异常 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid c...

Rain___Blue的博客 6481

java 忽略 https 验证_java httpclient跳过https证书验证

httpclien调用skipHttpsUtil得wrapClient方法跳过https证书验证SkipHttpsUtil skipHttpsUtil=new SkipHttpsUtil();CloseableHttpClient httpclient = null;CloseableHttpResponse response = null;try {httpclient = (Closeab...

weixin_35379749的博客 1119
上一篇: 从零开始写项目第一项-项目搭建
下一篇: JAVA WEB中利用@responsebody返回json
Java_chaozi
博客等级 码龄11年 11粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值