V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
changdy
V2EX  ›  Java

各位 Java 大佬你们 http 客户端都用什么?

  •  
  •   changdy · 2020-08-23 10:06:26 +08:00 · 8660 次点击
    这是一个创建于 461 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用过不少 httpclient , 感觉大部分 client 细节非常多. 但其实对于后端来说,几乎所有的都是非常简单的 json 请求, 用起来颇有一种大炮打蚊子的感觉.

    目前公司系统针对各自的请求对 apache httpclient 进行了非常简单的封装,但即便如此,也不具备通用性.想问下各位 V 友,你们是怎么选择 httpclient 的 , 有没有进行过二次封装

    1, java 9+ 自带 httpclient(我比较喜欢这种链式调用的,但是 java8 没有)

    2, apache 原生 httpclient

    3, 封装过的 apache httpclient

    4, OkHttp

    5, Feign

    6, RestTemplate

    7, Retrofit

    69 条回复    2020-09-30 18:52:18 +08:00
    aidoudou
        1
    aidoudou   2020-08-23 10:12:53 +08:00
    3
    wongy
        2
    wongy   2020-08-23 10:14:51 +08:00   ❤️ 1
    用的是 hutool-http 工具包
    coetzee
        3
    coetzee   2020-08-23 10:19:03 +08:00
    用的 feign,feign 默认用的 httpclient,但是我们替换成了 OK
    flyfanc
        4
    flyfanc   2020-08-23 10:21:06 +08:00
    3
    ztechstack
        5
    ztechstack   2020-08-23 10:24:29 +08:00 via iPhone
    resttemplate over httpclient/okhttp
    ily433664
        6
    ily433664   2020-08-23 10:36:47 +08:00
    3
    srx1982
        7
    srx1982   2020-08-23 10:40:01 +08:00
    4
    chendy
        8
    chendy   2020-08-23 10:41:29 +08:00
    6 ( RestTemplate )套着 2 ( HttpClient ),spring-boot 自动配置
    Foxkeh
        9
    Foxkeh   2020-08-23 10:43:11 +08:00
    234567 都用, 老项目 234, 新项目 256
    rockyou12
        10
    rockyou12   2020-08-23 10:44:47 +08:00
    OkHttp 和 feign 用得多,如果写 android 会用 Retrofit 。基本不管用哪个,多少都要针对业务做封装或配置
    zoharSoul
        11
    zoharSoul   2020-08-23 10:54:56 +08:00
    okhttp + retrofit
    DreamSpace
        12
    DreamSpace   2020-08-23 11:03:02 +08:00 via Android
    restTemplate over okhttp
    但是 restTemplate 不好做文件下载
    vimfox
        13
    vimfox   2020-08-23 11:08:08 +08:00
    AsyncHttpClient
    skypyb
        14
    skypyb   2020-08-23 11:14:08 +08:00 via Android   ❤️ 2
    jdk9 新增的那个 httpclient 有坑的,不让设置一些敏感的请求头, 而且你本地能跑指不定到服务器上就崩了。 我用 java11 就遇到过。 想要
    要关掉这个检查还得上 jdk12 才能有这个设置
    WebKit
        15
    WebKit   2020-08-23 11:21:57 +08:00 via Android
    okhttp
    Cyron
        16
    Cyron   2020-08-23 11:42:08 +08:00
    简单请求 Hutool 可以
    ilumer
        17
    ilumer   2020-08-23 11:50:13 +08:00
    feign
    zhouhui
        18
    zhouhui   2020-08-23 11:56:39 +08:00
    xuanbg
        19
    xuanbg   2020-08-23 12:36:57 +08:00
    3 对外,5 对内
    sagaxu
        20
    sagaxu   2020-08-23 12:47:47 +08:00 via Android
    同步阻塞用 okhttp,唯一不足是不支持带 body 的 GET 请求。

    异步和协程用 vertx-web-client 。

    都会做些封装,但是发现也没少写很多代码
    qwerthhusn
        21
    qwerthhusn   2020-08-23 13:31:39 +08:00
    非大佬,用的 OkHttp 封装的对外
    JDK 自带的 HttpClient 用过,但是在 TLS1.3 的情况下有 BUG,弃用了。不过过了这么久 BUG 可能已经修复了,如果后面有新工程准备用这个重新封装。

    对内的话,直接 Feign 了,管他底层是用的 Apache 还是 OkHttp

    不用 Apache HttpClient 的原因是,一个模型太复杂,没仔细去看里面详细的东西,文档也不好,官网就几个示例,不像 OkHttp,就一个统一的 OkHttpClient 一把梭;还有一个问题就是版本兼容性不好,4.4 的 API,4.5 发现就编译报错了。
    crossoverJie
        22
    crossoverJie   2020-08-23 15:43:39 +08:00
    CoSpLi
        23
    CoSpLi   2020-08-23 15:49:04 +08:00 via iPhone
    httpclient 有 fluent-hc 这个官方封装的链式调用的
    m1ch3ng
        24
    m1ch3ng   2020-08-23 16:09:12 +08:00
    hutool
    wancaibida
        25
    wancaibida   2020-08-23 16:13:56 +08:00 via iPhone
    没人用 unirest 么
    kingfalse
        26
    kingfalse   2020-08-23 16:59:29 +08:00 via Android
    jsoup,不管是爬虫还是平常服务调接口我都用这个
    szuwl
        27
    szuwl   2020-08-23 17:01:37 +08:00   ❤️ 1
    没有人用 unirest 么
    BBCCBB
        28
    BBCCBB   2020-08-23 17:13:26 +08:00
    当然是 feign 啊.
    oneoy
        29
    oneoy   2020-08-23 17:42:56 +08:00 via Android
    原声 socket
    KevinBlandy
        30
    KevinBlandy   2020-08-23 17:47:24 +08:00
    RestTemplate
    yeziqing
        31
    yeziqing   2020-08-23 18:41:00 +08:00
    JDK11 自带的 HttpClient
    cassyfar
        32
    cassyfar   2020-08-23 18:48:29 +08:00
    apach httpclient 有什么不好?
    Cuo
        33
    Cuo   2020-08-23 18:49:58 +08:00 via iPhone
    个人项目用 4
    Cbdy
        34
    Cbdy   2020-08-23 18:58:35 +08:00 via Android
    遇到过 jdk9 的 httpclient 的一些 bug,我用 resttemplate
    @DreamSpace 你遇到什么下载文件的问题?
    micean
        35
    micean   2020-08-23 19:22:08 +08:00 via Android
    vertx 自带
    tairan2006
        36
    tairan2006   2020-08-23 19:38:32 +08:00
    用 4
    coolxll
        37
    coolxll   2020-08-23 19:59:13 +08:00
    @szuwl #27 Unirest 挺好用的
    jzmws
        38
    jzmws   2020-08-23 20:11:45 +08:00
    spring boot 项目直接用 RestTemplate 很方便
    wdlth
        39
    wdlth   2020-08-23 20:13:49 +08:00
    OKHttp
    chocotan
        40
    chocotan   2020-08-23 20:47:13 +08:00
    主要用 okhttp
    偶尔用 asynchttpclient
    guanhui07
        41
    guanhui07   2020-08-23 20:57:01 +08:00
    3
    iFlicker
        42
    iFlicker   2020-08-23 23:04:32 +08:00 via Android
    HttpURLConnection 🙈
    arloor
        43
    arloor   2020-08-23 23:19:49 +08:00
    appache 的 httpclient 5.0 才支持 http2,而且 beta
    mango88
        44
    mango88   2020-08-23 23:42:49 +08:00   ❤️ 1
    vertx 的 WebClient
    sutra
        45
    sutra   2020-08-24 08:56:44 +08:00
    看情况,大部分情况下,不直接使用 http client,而是选择封装过的。比如只是调用 RESTful API 时,RestTemplate 就很方便。
    unco020511
        46
    unco020511   2020-08-24 09:06:31 +08:00
    原来 java 也能用 retrofit 吗,我以为只有 Android 才用
    ShotaconXD
        47
    ShotaconXD   2020-08-24 09:43:11 +08:00
    RestTemplate 很好用啊.
    l107868382
        48
    l107868382   2020-08-24 09:43:43 +08:00
    Requests 不香吗?
    wbf1013
        49
    wbf1013   2020-08-24 09:54:35 +08:00
    上周哪位用 hutool 的大佬,爬了我们网站[doge]
    Yano
        50
    Yano   2020-08-24 09:55:33 +08:00
    RestTemplate 。如果 postman 请求的话,能直接复制 Java 代码,这时就用 okhttp
    JRay
        51
    JRay   2020-08-24 09:58:28 +08:00
    hutool-http + 1
    seanxx
        52
    seanxx   2020-08-24 09:58:50 +08:00
    5
    william2ct
        53
    william2ct   2020-08-24 10:09:15 +08:00
    3
    nutting
        54
    nutting   2020-08-24 10:33:46 +08:00
    http2.0 好像很多不支持,okhttp 可以
    qocja
        55
    qocja   2020-08-24 10:34:45 +08:00
    postman 复制出来的 okttp 代码
    bigpower777
        56
    bigpower777   2020-08-24 10:57:24 +08:00
    netty 自己写一个想要什么都有~
    tramm
        57
    tramm   2020-08-24 11:02:24 +08:00
    okhttp
    现在 forest,对 okhttp,httpclient 的封装
    yamasa
        58
    yamasa   2020-08-24 12:49:26 +08:00
    webflux 内的 webclient 。在 reactor 那上面的一套。另外,“. 但其实对于后端来说,几乎所有的都是非常简单的 json 请求”?? 说这种话可要谨慎啊。
    luxinfl
        59
    luxinfl   2020-08-24 15:21:22 +08:00
    36 对外,5 对内
    leaderhyh
        60
    leaderhyh   2020-08-24 16:01:23 +08:00
    Retrofit
    Kamiyu0087
        61
    Kamiyu0087   2020-08-24 18:11:41 +08:00   ❤️ 1
    用 HttpURLConnection #手动捂脸
    joyhub2140
        62
    joyhub2140   2020-08-24 18:34:01 +08:00 via Android
    @Kamiyu0087 不错,识货,用了 10 年了,除非要求强上 http2.0,不然这货就是最简单的选择。
    supermoonie
        63
    supermoonie   2020-08-24 18:39:08 +08:00 via iPhone
    我大 Netty 呢🐶
    chachae
        64
    chachae   2020-08-24 22:22:23 +08:00
    feign
    hdfg159
        65
    hdfg159   2020-08-24 23:14:28 +08:00 via Android
    vertx web client
    751762476
        66
    751762476   2020-08-25 15:38:56 +08:00
    ktor webclient
    fivesmallq
        67
    fivesmallq   2020-09-22 15:13:36 +08:00
    duniqb
        68
    duniqb   2020-09-30 17:22:40 +08:00
    @kingfalse jsoup 是解析的吧
    kingfalse
        69
    kingfalse   2020-09-30 18:52:18 +08:00 via Android
    @duniqb 多去看看官方文档吧
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   990 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    ♥ Do have faith in what you're doing.