用Requests,模仿 Python 的 requests 模块来设计的 Http Client

Java 中常用的Http Client有自带的HttpURLConnection,以及Apache Http Client。HttpURLConnection 功能比较简单,像参数编码,数据转换这些事情都要自己完成,使用起来很繁琐;而Apache Http Client虽然功能强大,但是接口设计繁复,学习和编码成本都比较高。


Requests, 是一个模仿 Python 的 requests 模块来设计的 Http Client,拥有简单而灵活的 API,在容易使用的同时,又能够满足各种高级定制的需求。

看一个简单的使用:

String url = ...;
String resp = Requests.get(url).send().readToText();
// or
Response<String> resp = Requests.get(url).send().toTextResponse();

可以只读取响应的Body,或者读取整个response,这样可以从response中再获取需要的Headr, Cookie等信息。

int statusCode = resp.getStatusCode();
Headers headers = resp.getHeaders();
Cookies cookies = resp.getCookies();
String body = resp.getBody();

传递 URL 参数,可以使用Map, Collection<Parameter> 等作为参数:

Map<String, Object> params = new HashMap<>();
params.put("k1", "v1");
params.put("k2", "v2");
String resp = Requests.get(url).params(params).send().readToText();
// 直接设置
String resp = Requests.get(url)
        .params(Parameter.of("k1", "v1"), Parameter.of("k2", "v2"))
        .send().readToText();

传递Post参数:

Map<String, Object> params = new HashMap<>();
params.put("k1", "v1");
params.put("k2", "v2");
String resp = Requests.post(url).forms(params).send().readToText();
// 直接设置
String resp = Requests.post(url)
        .forms(Parameter.of("k1", "v1"), Parameter.of("k2", "v2"))
        .send().readToText();

设置Header:

Map<String, Object> headers = new HashMap<>();
headers.put("k1", "v1");
headers.put("k2", "v2");
String resp = Requests.get(url).headers(headers).send().readToText();
// 直接设置
String resp = Requests.get(url)
        .headers(Parameter.of("k1", "v1"), Parameter.of("k2", "v2"))
        .send().readToText();

设置 Cookie:

Map<String, Object> cookies = new HashMap<>();
cookies.put("k1", "v1");
cookies.put("k2", "v2");
String resp = Requests.get(url).cookies(cookies).send().readToText();

String resp = Requests.get(url)
        .cookies(Parameter.of("k1", "v1"), Parameter.of("k2", "v2"))
        .send().readToText();

使用Session, session可以保持和处理cookie等信息:

Session session = Requests.session();
String resp1 = session.get(url1).send().readToText();
String resp2 = session.get(url2).send().readToText();

原文出处!!!!!!!!!!!!!!!!

github源码地址

猜你喜欢

转载自blog.csdn.net/c_molione/article/details/81012596
今日推荐