Httpclient Fluent API简单封装
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.Consts;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.fluent.Executor;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.cookie.Cookie;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class RequestSender {
private static CookieStore cookieStore = new BasicCookieStore();
private static Executor executor = Executor.newInstance().use(cookieStore);
private String url;
private String method;
private Map<String, String> paraMap;
private String bodyString;
private ContentType contentType;
private Map<String, String> headerMap;
static {
loginSsoFirst();
}
public RequestSender(RequestSenderBuilder builder) {
this.url = builder.url;
this.method = builder.method;
this.paraMap = builder.paraMap;
this.bodyString = builder.bodyStr;
this.contentType = builder.contentType;
this.headerMap = builder.headerMap;
}
public static RequestSenderBuilder given() {
return new RequestSender.RequestSenderBuilder();
}
private Request buildRequest() throws IOException {
Request request = null;
if (HttpPost.METHOD_NAME.equals(method)) {
request = Request.Post(url).connectTimeout(5000);
} else if (HttpGet.METHOD_NAME.equals(method)) {
request = Request.Get(url).connectTimeout(5000);
} else if (HttpDelete.METHOD_NAME.equals(method)) {
request = Request.Delete(url).connectTimeout(5000);
} else if (HttpPut.METHOD_NAME.equals(method)) {
request = Request.Put(url).connectTimeout(5000);
}
if (null != paraMap && paraMap.size() != 0) {
List<NameValuePair> param = new ArrayList<NameValuePair>();
paraMap.forEach((k, v) -> {
param.add(new BasicNameValuePair(k, v));
});
request = request.bodyForm(param, Consts.UTF_8);
}
if (null != bodyString && !bodyString.equals("")) {
if (contentType != null) {
throw new IOException("Use bodystr must specify contentType!");
}
request = request.bodyString(bodyString, contentType);
}
if (null != headerMap && headerMap.size() != 0) {
for (Map.Entry<String, String> e : headerMap.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
}
return request;
}
public RequestResult sendRequest() {
RequestResult r = new RequestResult();
HttpResponse response;
try {
Request request = buildRequest();
response = executor.execute(request).returnResponse();
int code = response.getStatusLine().getStatusCode();
if (code == HttpStatus.SC_OK || code == HttpStatus.SC_MOVED_TEMPORARILY) {
r.setSuccess(true);
r.setEntity(response.getEntity());
r.setReponseText(EntityUtils.toString(response.getEntity(), "UTF-8"));
} else {
r.setSuccess(false);
r.setErrorMsg("Http Status Code Error:" + code);
}
} catch (IOException e) {
r.setSuccess(false);
r.setErrorMsg(e.getMessage());
e.printStackTrace();
}
return r;
}
public static String getCookieValue(String key) {
return cookieStore.getCookies().stream().filter(u -> u.getName().equals(key)).findFirst().get().getValue();
}
public static void addCookie(String name, String value) {
Cookie cookie = new BasicClientCookie(name, value);
cookieStore.addCookie(cookie);
}
private static void loginSsoFirst() {
try {
Map<String, String> loginInfoMap = ConfigLoader.loadLoginInfo();
if (loginInfoMap == null || loginInfoMap.size() == 0) {
return;
}
Map<String, String> map = new HashMap<String, String>(4);
map.put("username", loginInfoMap.get("user"));
map.put("password", loginInfoMap.get("pwd"));
String url = loginInfoMap.get("url");
RequestResult sendRequest = given().post(url).paraMap(map).when().sendRequest();
System.out.println(sendRequest.getReponseText());
if (!sendRequest.isSuccess()) {
throw new Exception("Login Error:" + sendRequest.getErrorMsg());
}
if (cookieStore.getCookies().size() == 0) {
throw new Exception("Cannot get cookie from reponse");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static class RequestSenderBuilder {
private String url = "";
private String method = "get";
private Map<String, String> paraMap;
private String bodyStr = "";
private ContentType contentType;
public Map<String, String> headerMap;
public RequestSenderBuilder get(String url) {
this.url = url;
this.method = HttpGet.METHOD_NAME;
return this;
}
public RequestSenderBuilder post(String url) {
this.url = url;
this.method = HttpPost.METHOD_NAME;
return this;
}
public RequestSenderBuilder delete(String url) {
this.url = url;
this.method = HttpDelete.METHOD_NAME;
return this;
}
public RequestSenderBuilder put(String url) {
this.url = url;
this.method = HttpPut.METHOD_NAME;
return this;
}
public RequestSenderBuilder paraMap(Map<String, String> paraMap) {
this.paraMap = paraMap;
return this;
}
public RequestSenderBuilder bodyStr(String bodyStr) {
this.bodyStr = bodyStr;
return this;
}
public RequestSenderBuilder contentType(ContentType contentType) {
this.contentType = contentType;
return this;
}
public RequestSenderBuilder headerMap(Map<String, String> map) {
this.headerMap = map;
return this;
}
public RequestSender when() {
return new RequestSender(this);
}
}
}
Httpclient Fluent API简单封装的更多相关文章
- HttpClient 之Fluent API 简单使用
相比于HttpClient 之前的版本,HttpClient 4.2 提供了一组基于流接口(fluent interface)概念的更易使用的API,即Fluent API. 为了方便使用,Fluen ...
- HttpClient Fluent API 高并发优化
apache的httpcomponents-client 4.2之后提供了一套易于使用的facade API称为Fluent API,对于一般使用场景来说,使用起来非常简便,且性能也有一定保证,因为其 ...
- Hbase API 简单封装
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- 简单封装axios api
可以在代码逻辑中写axios请求,处理请求结果,但是随着项目越来越大,代码会很繁琐,不容易维护,所以,可以把一些在所有请求中都要处理的逻辑抽取出来,封装成api方法.比如每次请求中都要判断是否有权限, ...
- .NetCore简单封装基于IHttpClientFactory的HttpClient请求
IHttpClientFactory是什么?为什么出现了IHttpClientFactory 一.IHttpClientFactory是什么? IHttpClientFactory是.netcore2 ...
- HttpClient4.2 Fluent API学习
相比于HttpClient 之前的版本号,HttpClient 4.2 提供了一组基于流接口(fluent interface)概念的更易使用的API,即Fluent API. 为了方便使用,Flue ...
- Angular:使用service进行http请求的简单封装
①使用ng g service services/storage创建一个服务组件 ②在app.module.ts 中引入HttpClientModule模块 ③在app.module.ts 中引入创建 ...
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
随机推荐
- Android JNI编程(四)——C语言多级指针、数组取值、从控制台输入数组
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:前面我们介绍了一级指针的相关概念和用发,今天我们就来说一说多级指针. 1 ...
- LeetCode -- 删除链表中值为k的元素
本题目比較直接,一次遍历遇到匹配的元素直接删除(通过n.next = n.next.next)就能够了,仅仅是须要考虑到:1.首节点的情况2.末节点的情况 下面为实现: public ListNode ...
- Android 解决Android的TextView和EditText换行问题
最近版本迭代的新增收货地址模块出现地址填写时点击换行,然后网络提交数据到后台,在地址列表查看地址时,也出现换行的问题. 问题效果图: 1.分析原因 用Google的DHC工具进行网络模拟请求,发现返回 ...
- 【t083】买票
[题目链接]:http://noi.qz5z.com/viewtask.asp?id=t083 [题解] 可以看一下: 钱数很小; 最大才10000; 即使每张票都是1元; 最多也只能买10000张票 ...
- 数据库使用char要留心
表根据要求需要变更,加一个标识字段,一个字母搞定,我加了一个长度为2的字段 char(2)..... 结果,他们前台开发数据一直不出来,看前台与后台都有记录了,最后发现,此字段我默认加上一个字符,其实 ...
- 【codeforces 752F】Santa Clauses and a Soccer Championship
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- ITFriend创业败局(一):选择创业方向和寻找合伙人,创业失败的2个关键点
这次创业惨淡收场,最主要的原因是没有选择一个合适的创业方向,没有找到合适的创业合伙人. 首先要说到创业方向,因为不同的创业方向需要组建不同的创业团队.我个人比较偏好,软件.网络.互联网等有一 ...
- 【b304】传染病防治
Time Limit: 1 second Memory Limit: 50 MB [问题背景] 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国 大范围流行,该国政府决定不惜 ...
- 【9705】&&【a801】细胞
Time Limit: 10 second Memory Limit: 2 MB 问题描述 一矩形阵列由数字1~9代表细胞,细胞的定义是沿细胞数字上下左右如果还是细胞数字则为同一细胞,求给定矩形阵列的 ...
- 解决:insert Vodafone sim card,open the mms read report,when receive the read report,cann't download..
insert Vodafone sim card,open the mms read report,when receive the read report,cann't download the m ...