您好!欢迎来到北极熊网

北极熊网

热门搜索: 任正非传    神雕侠侣    红楼梦   

Java原生HttpClient怎么使用

  • 技术文档
  • 来源:北极熊
  • 编辑:佚名
  • 时间:2022-12-31 17:03
  • 阅读:109

1.信任证书管理类

 Java

package cn.wja.component; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; 
 
 class MyX509TrustManager implements X509TrustManager { 
    @Override 
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s)  { 
    } 
 
    @Override 
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s)  { 
    } 
 
    @Override 
    public X509Certificate[] getAcceptedIssuers() { 
        return null; 
    } 
 
    public static TrustManager[] getTrustManagers() { 
        TrustManager[] trustAllCertificates = {new MyX509TrustManager()}; 
        return trustAllCertificates; 
    } }

2.HttpClient类

 Java

package cn.wja.component; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLParameters; import javax.net.ssl.TrustManager; import java.net.http.HttpClient; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.time.Duration; 
 public class MyHttpClient { 
    static public HttpClient getClient() throws NoSuchAlgorithmException, KeyManagementException { 
        TrustManager[] trustManagers = MyX509TrustManager.getTrustManagers(); 
        var timeoutInSeconds = 60; 
        SSLParameters sslParams = new SSLParameters(); 
        sslParams.setEndpointIdentificationAlgorithm(""); 
        SSLContext sc = SSLContext.getInstance("SSL"); 
        //取消主机名验证 
        System.setProperty("jdk.internal.httpclient.disableHostnameVerification", "true"); 
        sc.init(null, trustManagers, new SecureRandom()); 
        return HttpClient.newBuilder() 
                .connectTimeout(Duration.ofMillis(timeoutInSeconds * 1000)) 
                .sslContext(sc) 
                .sslParameters(sslParams) 
                .followRedirects(HttpClient.Redirect.NEVER) 
                .version(HttpClient.Version.HTTP_2) 
                .build(); 
    } }

3.发送请求工具类

 Java

package cn.wja.util; 
 import cn.wja.component.MyHttpClient; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; 
 
 import static java.nio.charset.StandardCharsets.UTF_8; 
 public class HttpUtils { 
 
    public static HttpResponse<String> sendGet(String urlStr, String cookieStr) throws Exception { 
        HashMap<String, String> hashMap = new HashMap<>(); 
        hashMap.put("Cookie",cookieStr); 
        return sendGet(urlStr,hashMap); 
    } 
 
 
    public static HttpResponse<String> sendGet(String urlStr, Map<String,String> headers) throws KeyManagementException, NoSuchAlgorithmException, IOException, InterruptedException { 
        HttpClient client = MyHttpClient.getClient(); 
        HttpRequest.Builder reqBuilder = getReqBuilder(urlStr); 
        reqBuilder.GET(); 
        for (String key:headers.keySet()){ 
            reqBuilder.header(key, headers.get(key)); 
        } 
        HttpRequest request = reqBuilder.build(); 
        HttpResponse<String> result = client.send(request, HttpResponse.BodyHandlers.ofString(UTF_8)); 
        return result; 
    } 
 
    private static HttpResponse<String> sendPost(String contentType, String urlStr, String bodyStr, String cookieStr) throws Exception { 
        HttpClient client = MyHttpClient.getClient(); 
        HttpRequest.Builder reqBuilder = getReqBuilder(urlStr); 
        HttpRequest.BodyPublisher bodyPublisher = HttpRequest.BodyPublishers.ofString(bodyStr); 
        reqBuilder.header("Content-Type", contentType) 
                .POST(bodyPublisher) 
                .header("Cookie", cookieStr); 
        HttpRequest request = reqBuilder.build(); 
        HttpResponse<String> result = client.send(request, HttpResponse.BodyHandlers.ofString(UTF_8)); 
        return result; 
    } 
     
    public static HttpResponse<String> sendFormPost(String urlStr, String formStr, String cookieStr) throws Exception { 
        return sendPost("application/x-www-form-urlencoded;charset=utf-8", urlStr, formStr, cookieStr); 
    } 
 
    public static HttpResponse<String> sendJsonPost(String urlStr, String jsonStr, String cookieStr) throws Exception { 
        return sendPost("application/json;charset=utf-8", urlStr, jsonStr, cookieStr); 
    } 
 
    public static HttpRequest.Builder getReqBuilder(String urlStr) { 
        return HttpRequest.newBuilder() 
                .uri(URI.create(urlStr)) 
                .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0"); 
    } }

4.测试

Java原生HttpClient怎么使用

测试表明,通过调用工具类方法,可以直接发送GET请求和带Form表单/Json的POST请求。如果您要发送其他形式的HTTP请求,也可以参照上述代码自行实现。


全部评论(0)
资讯详情页最新发布上方横幅
推荐阅读
  • 《孙子兵法》全文(附白话译文)
  • 《孙子兵法》全文(附白话译文)
  • 《孙子兵法》第一章:始计1、孙子曰:兵者,国之大事,死生之地,存亡之道,不可不察也。【译文】孙子说:战争是国家的大事,它关系着人民的生死和宗庙社稷的存亡,是不可不认真考察了解的。2、故经之以五(事),校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五曰法。道者,令民与上同意也,故可(以)与之死,可(以)与之生,而不(畏危)〔诡也〕。天者,阴阳、寒暑、时制也。地者,远近、险易、广狭、死生也。将者,智、信、仁、勇、严也。法者,曲制、官道
  • 文库
  • 编辑:佚名
  • 时间:2023-03-26 04:56
  • 阅读:2
  • javascript中如何匹配具体数量
  • javascript中如何匹配具体数量
  • 说明1、可花括号的数量说明符可用于指定匹配模式的上下限。但是有时候只需要特定数量的匹配。2、指定一定数量的匹配模式,只需在大括号之间放置一个数字。实例要求修改正则表达式timRegex,以匹配仅有四个字母 m 的单词 Timber。let timStr = "Timmmmber";let timRegex = /change
  • 技术服务
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:16
  • 阅读:53
  • javascript中先行断言指的是什么
  • javascript中先行断言指的是什么
  • 说明1、先断言是告诉JavaScript在字符串中向前搜索的匹配模式。如果你想在同一个字符串上搜索多个匹配模式,可能会有用。2、先行断言有两种:正向先行断言和负向先行断言。实例let quit = "qu";let noquit = "qt";let quRegex= /q(?=u)/;let qRegex&
  • 技术文档
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:15
  • 阅读:58
  • 怎么用JavaScript实现截屏功能
  • 怎么用JavaScript实现截屏功能
  • 1.Blob的媒体类型必须是"image/svg+xml"2.需要一个svg元素3.在svg元素里面插入一个 foreignObject 元素4.在foreignObject元素里面放入符合规范的html把dom转成canvas就这么简单,就上面几个步骤。下面是文档给出的一上简单的demo:
  • 技术文档
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:14
  • 阅读:60
  • javascript是不是解释型语言
  • javascript是不是解释型语言
  • javascript是具有函数优先的轻量级、解释型的编程语言。javascript被广泛用于web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。本文操作环境:windows10系统、javascript1.8.5、thinkpadt480电脑。JavaScript是一种具有函数优先的轻量级,解释型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScr
  • 技术文档
  • 来源:北极熊
  • 编辑:oal
  • 时间:2023-01-01 14:13
  • 阅读:53
联系我们
电话:18936411277
邮箱:1044412291@qq.com
时间:09:00 - 19:00
公众号:北格软件
底部广告