http-requst
最大的特点是基于URLConnection实现,不依赖HttpClient
URLConnection的优点是内置于Java标准库中,无需引入其他依赖。而HttpClient需要引入额外的包和依赖。
引用
1 | <dependency> |
Get请求
1 | public static HttpRequest get(final URL url) throws HttpRequestException { |
获取响应报文
1 | String response = HttpRequest.get("http://www.baidu.com").body(); |
获取响应码
1 | int code = HttpRequest.get("http://google.com").code(); |
请求传参
第一种写法
1 | HttpRequest request = HttpRequest.get("http://google.com", true, 'macId', "10051", "size", "测试机构"); |
第二种
1 | Map data = new HashMap(); |
Post请求
Form形式
1 | Map<String, String> data = new HashMap<String, String>(); |
JSON形式
1 | JsonObject jsonContent = new JsonObject(); |
文件
1 | HttpRequest request = HttpRequest.post("url”); |
Hutool
一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅。
引用
1 | <dependency> |
Get请求
1 | // 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS |
Post请求
1 | HashMap<String, Object> paramMap = new HashMap<>(); |
Form形式
1 | //链式构建请求 |
JSON形式
1 | String json = ...; |
文件上传
1 | HashMap<String, Object> paramMap = new HashMap<>(); |
文件下载
因为Hutool-http机制问题,请求页面返回结果是一次性解析为byte[]的,如果请求URL返回结果太大(比如文件下载),那内存会爆掉,因此针对文件下载HttpUtil单独做了封装。文件下载在面对大文件时采用流的方式读写,内存中只是保留一定量的缓存,然后分块写入硬盘,因此大文件情况下不会对内存有压力。
1 | String fileUrl = "http://mirrors.sohu.com/centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso"; |
如果想获取下载进度
1 | //带进度显示的文件下载 |
配置代理
如果代理无需账号密码,可以直接:
1 | String result2 = HttpRequest.post(url) |
如果需要自定其他类型代理或更多的项目,可以:
1 | String result2 = HttpRequest.post(url) |
如果遇到https代理错误Proxy returns "HTTP/1.0 407 Proxy Authentication Required"
,可以尝试:
1 | System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); |
Feign
可参考
https://www.psvmc.cn/article/2019-02-14-springcloud-feign.html