Rumah  >  Artikel  >  Java  >  Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam Java

Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam Java

王林
王林ke hadapan
2023-06-14 20:06:351421semak imbas
Jadual Kandungan
  • Bahagian 1: Ringkasan ringkas konfigurasi biasa permintaan HTTP

  • Bahagian 2: Menggunakan HttpUtils JavaLib

  • Bahagian 3: Kongsi bagaimana HttpUtils dikapsulkan

Permintaan HTTP agak biasa dalam pembangunan harian Hari ini saya akan berkongsi dengan anda cara menggunakan HttpUtils.

Membaca artikel ini, anda akan mendapat:

  • Ringkasan ringkas konfigurasi biasa permintaan HTTP; gunakan HttpUtils dalam JavaLib;

  • Cara untuk merangkum kelas alat permintaan HTTP.

  • Bahagian 1: Ringkasan ringkas konfigurasi biasa untuk permintaan HTTP

  • Helo semua, dalam pembangunan Java, kami sering menghadapi keperluan untuk memanggil perkhidmatan antara muka yang disediakan oleh pihak ketiga . Borang biasa Ia adalah HTTP + JSON Di bawah, kami akan menerangkan tetapan biasa permintaan http

http menyediakan pelbagai kaedah permintaan untuk memenuhi keperluan harian kami:

DAPATKAN

  • POST

  • PUT

  • PATCH

  • PADAM

  • Dalam pembangunan API RESTful, kami boleh mereka bentuk antara muka API kami berdasarkan kaedah permintaan ini. Contoh:

DAPATKAN: Dapatkan sumber

  • POST: Serahkan sumber

  • PUT: Kemas kini selesai Sumber

  • PATCH: Kemas kini beberapa sumber

  • DELETE: Padamkan sumber

  • Format parameter

borang borang

  • json

  • Lain-lain

Tetapan tamat masa

  • Bahagian 2: Menggunakan HttpUtils JavaLib

  • Permintaan dapatkan mudah
System.out.println(HttpUtils.get("https://www.baidu.com"));

Hasil respons:

<!DOCTYPE html><!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img  hidefocus=true src=//www.baidu.com/img/bd_logo1.png    style="max-width:90%"Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam Java" > </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write(&#39;<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=&#39;+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ &#39;" name="tj_login" class="lb">登录</a>&#39;);                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri >更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>关于百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a>  <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173号  <img  src=//www.baidu.com/img/gs.gif alt="Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam Java" > </p> </div> </div> </div> </body> </html>

Melalui percubaan mudah , dua perkara dibuktikan:

Pertama, ini masih boleh digunakan, kedua, ternyata sangat mudah digunakan.

Jika anda diminta menulis permintaan http dengan tangan, anda mungkin kosong dalam fikiran anda dan mencari pelbagai maklumat.

Mari cuba kompleks lain

antara muka:

Alamat antara muka: https://erwin-api.fengwenyi.com/erwin/blog/page Kaedah permintaan: DAPATKAN

Parameter: Halaman semasa, Saiz halaman

Format parameter: borang

Respons: application/json




Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam Javarreee

Hasil respons :

String url = "https://erwin-api.fengwenyi.com/erwin/bookmark/page?currentPage=1&pageSize=10";
Request request = new Request();
request.setUrl(url);
request.setMethod(Request.Method.GET);
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Accept", "application/json");
Request.Option option = new Request.Option();
option.setHeaders(headerMap);
try {
    System.out.println(HttpUtils.execute(request, option));
} catch (IOException e) {
    throw new RuntimeException(e);
}
Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam JavaHasil sambutan masih sesuai dengan jangkaan.

Sudah tentu, terdapat aspek HTTP yang lain, seperti tamat masa, dsb. Mari kita lihat contoh permintaan lengkap:

{
    "code":"SUCCESS",
    "message":"Success",
    "success":true,
    "header":null,
    "body":{
        "currentPage":1,
        "pageSize":10,
        "totalRows":661,
        "totalPages":67,
        "content":[
            {
                "id":"1634772578877935617",
                "timestamp":1678595130000,
                "enabledState":null,
                "name":"VScode 中文显示出现黄色方框的解决方法_vscode汉字被框住_YJer的博客-CSDN博客",
                "url":"https://blog.csdn.net/qq_33249042/article/details/123252625",
                "icon":null,
                "classifyName":"软件",
                "classifyId":"1522587269600481281"
            },
            {
                "id":"1632640455110922241",
                "timestamp":1678086792000,
                "enabledState":null,
                "name":"Spring中init-method和destroy-method的四种方式_星夜孤帆的博客-CSDN博客",
                "url":"https://blog.csdn.net/qq_38826019/article/details/117387398",
                "icon":null,
                "classifyName":"Spring",
                "classifyId":"1522586360887742466"
            },
            {
                "id":"1631597310596190209",
                "timestamp":1677838087000,
                "enabledState":null,
                "name":"vue3 + elemenplus实现导航栏 - 掘金",
                "url":"https://juejin.cn/post/7084871748608327687",
                "icon":null,
                "classifyName":"前端",
                "classifyId":"1525554881275990018"
            },
            {
                "id":"1631593154401636354",
                "timestamp":1677837096000,
                "enabledState":null,
                "name":"Spring bean 创建过程源码解析 - 腾讯云开发者社区-腾讯云",
                "url":"https://cloud.tencent.com/developer/article/1631160",
                "icon":null,
                "classifyName":"Spring",
                "classifyId":"1522586360887742466"
            },
            {
                "id":"1631592987673858050",
                "timestamp":1677837056000,
                "enabledState":null,
                "name":"SpringBoot之容器启动源码分析与Bean加载_springboot加载bean 源码_minemine0418的博客-CSDN博客",
                "url":"https://blog.csdn.net/minemine0418/article/details/102308912",
                "icon":null,
                "classifyName":"Spring Boot",
                "classifyId":"1522586446766116865"
            },
            {
                "id":"1631586585454678018",
                "timestamp":1677835530000,
                "enabledState":null,
                "name":"Spring-Bean生命周期 - 知乎",
                "url":"https://zhuanlan.zhihu.com/p/158468104",
                "icon":null,
                "classifyName":"Spring",
                "classifyId":"1522586360887742466"
            },
            {
                "id":"1631579732104548354",
                "timestamp":1677833896000,
                "enabledState":null,
                "name":"一文读懂 Spring Bean 的生命周期_spring bean的生命周期_老周聊架构的博客-CSDN博客",
                "url":"https://blog.csdn.net/riemann_/article/details/118500805",
                "icon":null,
                "classifyName":"Spring",
                "classifyId":"1522586360887742466"
            },
            {
                "id":"1630768897186697218",
                "timestamp":1677640578000,
                "enabledState":null,
                "name":"MySQL同时统计多个条件的记录条数_ztnhnr的博客-CSDN博客",
                "url":"https://blog.csdn.net/ztnhnr/article/details/107165942",
                "icon":null,
                "classifyName":"MySQL",
                "classifyId":"1522586805693681666"
            },
            {
                "id":"1630768792098410497",
                "timestamp":1677640553000,
                "enabledState":null,
                "name":"sql查询近七天,近两周,近一个月的数据_sql最近一周数据_心诚则灵'的博客-CSDN博客",
                "url":"https://blog.csdn.net/wenchangwenliu/article/details/119891790",
                "icon":null,
                "classifyName":"MySQL",
                "classifyId":"1522586805693681666"
            },
            {
                "id":"1630480535938764801",
                "timestamp":1677571827000,
                "enabledState":null,
                "name":"开源流程引擎哪个好,如何选型? - 知乎",
                "url":"https://zhuanlan.zhihu.com/p/369761832",
                "icon":null,
                "classifyName":"Java",
                "classifyId":"1522586296119300097"
            }
        ]
    }
}

Hasil respons adalah sama seperti di atas.

Bahagian 3: Kongsi cara HttpUtils dikapsulkan

Pertama,

dan

sepadan dengan permintaan dan respons HTTP Jalan pakej adalah seperti berikut:

RequestResponsecom.fengwenyi.javalib.http.Permintaan

  • com.fengwenyi.javalib.http.Response

  • Juga,

    untuk menyimpan konfigurasi parameter HTTP.
Sumber idea untuk bahagian ini ialah Spring Cloud OpenFeign.

com.fengwenyi.javalib.http.Request.OptionUntuk serasi dengan berbilang alat HTTP untuk melaksanakan permintaan,

diperkenalkan kelas alat lain hanya perlu melaksanakan antara muka

.

HttpClientFactoryHttpClientcom.fengwenyi.javalib.http.client.HttpClient

  • com.fengwenyi.javalib.http.client.HttpClientFactory

  • Ok, mari kita lihat kod di bawah:

  • HttpUtils#execute
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("currentPage", 1);
paramMap.put("pageSize", 10);
Map<String, String> headerMap = new HashMap<>();
headerMap.put("Accept", "application/json");
Request request = new Request();
request.setUrl("https://erwin-api.fengwenyi.com/erwin/bookmark/page");
request.setParam(paramMap);
request.setMethod(Request.Method.GET);
request.setUtil(Request.Util.OkHttp);
Request.Option option = new Request.Option();
option.setHeaders(headerMap);
option.setConnectTimeoutSecond(3);
option.setReadTimeoutSecond(5);
option.setLogLevel(Request.LogLevel.DEBUG);
try {
    String result = HttpUtils.execute(request, option);
    System.out.println(result);
} catch (IOException e) {
    throw new RuntimeException(e);
}

HttpClientFactory#get

public static String execute(Request request, Request.Option option) throws IOException {
    check(request);
    HttpClient httpClient = HttpClientFactory.get(request.getUtil());
    Response response = httpClient.execute(request, option);
    return handleResponse(response);
}

Jadi, hanya perlu laksanakan antara muka

.

rreeee

Atas ialah kandungan terperinci Cara menggunakan HttpUtils untuk menghantar permintaan HTTP dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam