当前位置: 移动技术网 > IT编程>开发语言>Java > Java开发小技巧(五):HttpClient工具类

Java开发小技巧(五):HttpClient工具类

2018年10月12日  | 移动技术网IT编程  | 我要评论

前言

大多数java应用程序都会通过http协议来调用接口访问各种网络资源,jdk也提供了相应的http工具包,但是使用起来不够方便灵活,所以我们可以利用apache的httpclient来封装一个具有访问http协议基本功能的高效工具类,为后续开发使用提供方便。

文章要点:

  • httpclient使用流程
  • 工具类封装
  • 使用实例

httpclient使用流程

1、导入maven依赖

<dependency>
    <groupid>org.apache.httpcomponents</groupid>
    <artifactid>httpclient</artifactid>
    <version>4.5.5</version>
</dependency>
<dependency>
    <groupid>commons-codec</groupid>
    <artifactid>commons-codec</artifactid>
    <version>1.11</version>
</dependency>
<dependency>
    <groupid>com.google.code.gson</groupid>
    <artifactid>gson</artifactid>
    <version>2.8.5</version>
</dependency>

2、创建httpclient实例

httpclient client = httpclientbuilder.create().build();

3、创建请求方法的实例

get请求使用httpget,post请求使用httppost,并传入请求的url

// post请求
httppost post = new httppost(url);
// get请求,url中带请求参数
httpget get = new httpget(url);

4、添加请求参数

普通形式

list<namevaluepair> list = new arraylist<>();
list.add(new basicnamevaluepair("username", "admin"));
list.add(new basicnamevaluepair("password", "123456"));

// get请求方式
// 由于get请求的参数是拼装在url后方,所以需要构建一个完整的url,再创建httpget实例
uribuilder uribuilder = new uribuilder("http://www.baidu.com");
uribuilder.setparameters(list);
httpget get = new httpget(uribuilder.build());

// post请求方式
post.setentity(new urlencodedformentity(list, charsets.utf_8));

json形式

map<string,string> map = new hashmap<>();
map.put("username", "admin");
map.put("password", "123456");
gson gson = new gson();
string json = gson.tojson(map, new typetoken<map<string, string>>() {}.gettype());
post.setentity(new stringentity(json, charsets.utf_8));
post.addheader("content-type", "application/json");

5、发送请求

调用httpclient实例的execute方法发送请求,返回一个httpresponse对象

httpresponse response = client.execute(post);

6、获取结果

string result = entityutils.tostring(response.getentity());

7、释放连接

post.releaseconnection();

工具类封装

httpclient工具类代码(根据相应使用场景进行封装):

public class httpclientutil {
    // 发送get请求
    public static string getrequest(string path, list<namevaluepair> parametersbody) throws restapiexception, urisyntaxexception {
        uribuilder uribuilder = new uribuilder(path);
        uribuilder.setparameters(parametersbody);
        httpget get = new httpget(uribuilder.build());
        httpclient client = httpclientbuilder.create().build();
        try {
            httpresponse response = client.execute(get);
            int code = response.getstatusline().getstatuscode();
            if (code >= 400)
                throw new runtimeexception((new stringbuilder()).append("could not access protected resource. server returned http code: ").append(code).tostring());
            return entityutils.tostring(response.getentity());
        }
        catch (clientprotocolexception e) {
            throw new restapiexception("postrequest -- client protocol exception!", e);
        }
        catch (ioexception e) {
            throw new restapiexception("postrequest -- io error!", e);
        }
        finally {
            get.releaseconnection();
        }
    }

    // 发送post请求(普通表单形式)
    public static string postform(string path, list<namevaluepair> parametersbody) throws restapiexception {
        httpentity entity = new urlencodedformentity(parametersbody, charsets.utf_8);
        return postrequest(path, "application/x-www-form-urlencoded", entity);
    }

    // 发送post请求(json形式)
    public static string postjson(string path, string json) throws restapiexception {
        stringentity entity = new stringentity(json, charsets.utf_8);
        return postrequest(path, "application/json", entity);
    }

    // 发送post请求
    public static string postrequest(string path, string mediatype, httpentity entity) throws restapiexception {
        logger.debug("[postrequest] resourceurl: {}", path);
        httppost post = new httppost(path);
        post.addheader("content-type", mediatype);
        post.addheader("accept", "application/json");
        post.setentity(entity);
        try {
            httpclient client = httpclientbuilder.create().build();
            httpresponse response = client.execute(post);
            int code = response.getstatusline().getstatuscode();
            if (code >= 400)
                throw new restapiexception(entityutils.tostring(response.getentity()));
            return entityutils.tostring(response.getentity());
        }
        catch (clientprotocolexception e) {
            throw new restapiexception("postrequest -- client protocol exception!", e);
        }
        catch (ioexception e) {
            throw new restapiexception("postrequest -- io error!", e);
        }
        finally {
            post.releaseconnection();
        }
    }
}

使用实例

get请求

list<namevaluepair> parametersbody = new arraylist();
parametersbody.add(new basicnamevaluepair("userid", "admin"));
string result = httpclientutil.getrequest("http://www.test.com/user",parametersbody);

post请求

list<namevaluepair> parametersbody = new arraylist();
parametersbody.add(new basicnamevaluepair("username", "admin"));
parametersbody.add(new basicnamevaluepair("password", "123456"));
string result = httpclientutil.postform("http://www.test.com/login",parametersbody);

post请求(json形式)

map<string,string> map = new hashmap<>();
map.put("username", "admin");
map.put("password", "123456");
gson gson = new gson();
string json = gson.tojson(map, new typetoken<map<string, string>>() {}.gettype());
string result = httpclientutil.postjson("http://www.test.com/login", json);

关于httpclient的详细介绍看这里:httpclient入门

本文为作者kmacro原创,转载请注明来源:。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网