httpclient4.3简单封装

简介:

   对httpclient4.3版本的一个简单封装,下面是代码

/**
 * httputil工具类
 * 
 * @author rex
 */
public class HttpUtil {

    private static CloseableHttpClient client;

    private static BasicCookieStore cookieStore;

    private static HttpGet get;

    private static HttpPost post;

    private static HttpResponse response;

    private static Result result;

    private static HttpEntity entity;

    /**
     * //TODO get请求
     * 
     * @param url 请求地址
     * @param headers 请求头
     * @param params 请求参数
     * @param encoding 请求编码
     * @return
     * @throws IOException
     * @throws ClientProtocolException
     */
    public static Result get(String url, Map<StringString> headers, Map<StringString> params) throws ClientProtocolExceptionIOException {

        cookieStore = new BasicCookieStore();
        client = HttpClients.custom().setDefaultCookieStore(cookieStore).build();

        url = (null == params ? url : url + "?" + parseParam(params));

        get = new HttpGet(url);

        get.setHeaders(parseHeader(headers));

        response = client.execute(get);
        entity = response.getEntity();

        result = new Result();

        result.setHttpClient(client);

        result.setCookies(cookieStore.getCookies());

        result.setStatusCode(response.getStatusLine().getStatusCode());

        result.setHeaders(response.getAllHeaders());

        result.setHttpEntity(entity);

        result.setBody(EntityUtils.toString(entity));
        return result;
    }

    /**
     * //TODO post请求
     * 
     * @param url 请求地址
     * @param headers 请求头
     * @param params 请求参数
     * @param encoding 请求编码
     * @return
     * @throws IOException
     * @throws ClientProtocolException
     */
    public static Result post(String url, Map<StringString> headers, Map<StringString> params, String encoding) throws ClientProtocolExceptionIOException {

        cookieStore = new BasicCookieStore();
        client = HttpClients.custom().setDefaultCookieStore(cookieStore).build();

        post = new HttpPost(url);

        List<NameValuePair> list = new ArrayList<NameValuePair>();
        for (String temp : params.keySet()) {
            list.add(new BasicNameValuePair(temp, params.get(temp)));
        }
        post.setEntity(new UrlEncodedFormEntity(list, encoding));

        post.setHeaders(parseHeader(headers));

        response = client.execute(post);
        entity = response.getEntity();

        result = new Result();

        result.setHttpClient(client);

        result.setCookies(cookieStore.getCookies());

        result.setStatusCode(response.getStatusLine().getStatusCode());

        result.setHeaders(response.getAllHeaders());

        result.setHttpEntity(entity);

        result.setBody(EntityUtils.toString(entity));
        return result;
    }

    /**
     * //TODO 转换header
     * 
     * @param headers
     * @return
     */
    private static Header[] parseHeader(Map<StringString> headers) {
        if (null == headers || headers.isEmpty()) {
            return getDefaultHeaders();
        }
        Header[] allHeader = new BasicHeader[headers.size()];
        int i = 0;
        for (String str : headers.keySet()) {
            allHeader[i] = new BasicHeader(str, headers.get(str));
            i++;
        }
        return allHeader;
    }

    /**
     * //TODO 默认header
     * 
     * @return
     */
    private static Header[] getDefaultHeaders() {
        Header[] allHeader = new BasicHeader[2];
        allHeader[0] = new BasicHeader("Content-Type""application/x-www-form-urlencoded");
        allHeader[1] = new BasicHeader("User-Agent""Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36");
        return allHeader;
    }

    /**
     * //TODO 转换参数列表
     * 
     * @param params
     * @return
     */
    private static String parseParam(Map<StringString> params) {
        if (null == params || params.isEmpty()) {
            return "";
        }
        StringBuffer sb = new StringBuffer();
        for (String key : params.keySet()) {
            sb.append(key + "=" + params.get(key) + "&");
        }
        return sb.substring(0, sb.length() - 1);
    }

    /**
     * 释放httpclient对象
     */
    public static void closeClient(CloseableHttpClient client) {
        if (null != client) {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

/**
 * 封装请求返回结果
 * @author rex
 *
 */
public class Result {

    private CloseableHttpClient httpClient;

    private List<Cookie> cookies;

    private HttpEntity httpEntity;

    private HashMap<String, Header> headerAll;

    private int statusCode;

    private String body;

    public List<Cookie> getCookies() {
        return cookies;
    }

    public void setCookies(List<Cookie> cookies) {
        this.cookies = cookies;
    }

    public CloseableHttpClient getHttpClient() {
        return httpClient;
    }

    public void setHttpClient(CloseableHttpClient httpClient) {
        this.httpClient = httpClient;
    }

    public int getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }

    public void setHeaders(Header[] headers) {
        headerAll = new HashMap<String, Header>();
        for (Header header : headers) {
            headerAll.put(header.getName(), header);
        }
    }

    public HashMap<String, Header> getHeaderAll() {
        return headerAll;
    }

    public void setHttpEntity(HttpEntity entity) {
        this.httpEntity = entity;
    }

    public HttpEntity getHttpEntity() {
        return httpEntity;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

}

一个登录小米的测试

public class XiaoMiLogin {

    public static void main(String[] args) {
        String login_url = "https://account.xiaomi.com/pass/serviceLoginAuth2";
        Map<String, String> params = new HashMap<String, String>();
        params.put("user""小米账号");
        params.put("pwd""密码");
        params.put("callback""https://account.xiaomi.com");
        params.put("sid""passport");
        params.put("display""mobile");
        params.put("qs""%3Fsid%3Dpassport");
        params.put("_sign""KKkRvCpZoDC+gLdeyOsdMhwV0Xg=");
        
        try {
            Result r = HttpUtil.post(login_url, nullparams"UTF-8");
            for(Cookie cookie : r.getCookies()){
                System.out.println(cookie.getName() + "=" + cookie.getValue());
            }
            HttpUtil.closeClient(r.getHttpClient());
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


目录
相关文章
|
Apache
HttpClient实现RPC调用
HttpClient实现RPC调用
64 0
|
8月前
封装httpclient工具类
httpclient远程调用工具封装使用
|
JSON 数据格式
HttpClient远程调用基本使用(详解)
HttpClient远程调用基本使用(详解)
355 0
|
8月前
|
Java Apache
远程调用工具HttpClient工具类封装
java远程调用工具HttpClient工具类类封装
|
Java Android开发
okhttp工具类封装
okhttp工具类封装
230 0
|
XML JSON Java
再见,HttpClient!再见,Okhttp!
因为业务关系,要和许多不同第三方公司进行对接。这些服务商都提供基于http的api。但是每家公司提供api具体细节差别很大。有的基于RESTFUL规范,有的基于传统的http规范;有的需要在header里放置签名,有的需要SSL的双向认证,有的只需要SSL的单向认证;有的以JSON 方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。
505 0
再见,HttpClient!再见,Okhttp!
java类模拟客户端调用servlet (httpClient)
最近做项目,用到JAVA普通类调用一个servlet应用,所以把部分代码也贴上来了。
152 0
|
Web App开发 .NET Windows
WebApi 异步请求(HttpClient)
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 今天公司总部要求各个分公司把短信接口对接上,所谓的短信接口其实就是GET或者Post请求,接到这个任务感觉好Easy。
1056 0