服务器之家

服务器之家 > 正文

详解Java发送HTTP请求

时间:2021-07-27 11:22     来源/作者:胖虎

前言

请求http的demo是个人亲测过,目前该方式已经在线上运行着。因为是http请求,所有发送post 和get 请求的demo都有在下方贴出,包括怎么测试,大家可直接 copy到自己的项目中使用。

正文

使用须知

为了避免大家引错包我把依赖和涉及到包路径给大家

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.net.httpurlconnection;
import java.net.uri;
 
import org.apache.http.httpresponse;
import org.apache.http.httpstatus;
import org.apache.http.client.methods.httpget;
import org.apache.http.client.methods.httppost;
import org.apache.http.client.utils.uribuilder;
import org.apache.http.entity.stringentity;
import org.apache.http.impl.client.closeablehttpclient;
import org.apache.http.impl.client.defaulthttpclient;
import org.apache.http.impl.client.httpclients;
import org.apache.http.util.entityutils;
 
 
import com.fasterxml.jackson.databind.objectmapper;
?
1
2
3
4
5
6
7
8
9
10
<dependency>
           <groupid>org.apache.httpcomponents</groupid>
           <artifactid>httpcore</artifactid>
           <version>4.4.8</version>
       </dependency>
       <dependency>
           <groupid>org.apache.httpcomponents</groupid>
           <artifactid>httpclient</artifactid>
           <version>4.5.3</version>
       </dependency>

http 发送 get 请求

首先我们引入两个包

发送get请求的工具类,可直接 copy 使用即可

另外,我抛出异常的代码大家改成自己业务的异常,不需要就删除掉。

参数说明:

host:ip

servuri:url

restring:参数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static string gethttpdata(string host, string servuri, string restring) throws exception {
        stringbuffer sb = new stringbuffer();
        sb.append("gethttpdata:host:" + host + ",servuri:" + servuri + ",restring:" + restring);
        string strresp = null;
        try {
            uri uri = new uribuilder().setscheme("http").sethost(host).setpath(servuri)
                    .setparameter("strinfo", restring).build();
            httpget httpget = new httpget(uri);
            closeablehttpclient client3 = httpclients.createdefault();
            httpresponse resp;
            resp = client3.execute(httpget);
            if (resp.getstatusline().getstatuscode() == httpurlconnection.http_ok) {
                strresp = entityutils.tostring(resp.getentity());
                logger.info("the return result:{}", strresp);
            } else {
                logger.info("error response:", resp.getstatusline().tostring());
                throw new commonbusinessexception(commonconstants.task_release_wcf,
                        commonconstants.task_release_wcf_desc);
            }
        } catch (exception e) {
            logger.error(sb.tostring() + ":" + e.getmessage(), e.getcause());
            throw new commonbusinessexception(commonconstants.task_release_wcf, commonconstants.task_release_wcf_desc);
        }
        return strresp;
    }
 

http 发送 post 请求

发送post分两种,我分两种的原因是为了让大家方便,想传对象和 json 可以直接复制过用就可以用,不用你们在转了。

第一种是直接接收json

参数明说:

url:url

json:参数

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static string dopostdata(string url, string json) throws exception {
        defaulthttpclient client = new defaulthttpclient();
        httppost post = new httppost(url);
        string result = "";
        httpresponse res = null;
        try {
            stringentity s = new stringentity(json.tostring(), "utf-8");
            s.setcontenttype("application/json");
            post.setheader("accept", "application/json");
            post.setheader("content-type", "application/json; charset=utf-8");
            post.setentity(s);
            res = client.execute(post);
            if (res.getstatusline().getstatuscode() == httpstatus.sc_ok) {
                result = entityutils.tostring(res.getentity());
                return httpstatus.sc_ok + "";
            }
        } catch (exception e) {
            if(res == null) {
                return "httpresponse 为 null!";
            }
            throw new runtimeexception(e);
        }
        if(res == null || res.getstatusline() == null) {
            return "无响应";
        }
        return res.getstatusline().getstatuscode() + "";
    }
?
1
2
3
4
5
6
7
8
9
@test
  public void test12() throws exception {
    string host = "http://eipwcf.aspirecn.com/svcef/service1.svc/wcf_ef_msa_getdatainfo_p";
    httpclient client = new httpclient();
    jsonobject json = new jsonobject();
    json.put("msgid", msgid);
    string reslut=client.dopostdata(host, json);
  }
 

第二种是参数是对象

参数说明:

url:url

tram:对象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static string dohttppostdata(string url, taskreleaseapprovalmodel tram)
            throws exception {
        stringbuffer sb = new stringbuffer();
        sb.append("dohttppostdata:url:" + url + ",tram:" + tram.tostring() + ",contenttype:" + contenttype);
        logger.info(sb.tostring());
        string tmpstring = "";
        httppost request = new httppost(url);
        request.setheader("accept", "application/json");
        request.setheader("content-type", "application/json");
        objectmapper mapper = new objectmapper();
        string jsonstring;
        try {
            jsonstring = mapper.writevalueasstring(tram);
            stringentity entity = new stringentity(jsonstring, "utf-8");
            request.setentity(entity);
            closeablehttpclient client = httpclients.createdefault();
            httpresponse response = client.execute(request);
            if (response.getstatusline().getstatuscode() == httpurlconnection.http_ok) {
                tmpstring = entityutils.tostring(response.getentity());
                logger.info("the post result:tmpstring:{}", tmpstring);
            } else {
                logger.info("the post failure:tmpstring:", tmpstring);
                throw new commonbusinessexception(commonconstants.task_release_wcf,
                        commonconstants.task_release_wcf_desc);
            }
        } catch (exception e) {
            logger.error(sb.tostring() + ":" + e.getmessage(), e.getcause());
            throw new commonbusinessexception(commonconstants.task_release_postwcf,
                    commonconstants.task_release_postwcf_desc);
        }
        return tmpstring;
    }

这个方法我想不用写测试类大家也会用,传过去对象和地址就可以了,很方便很简单。

以上所述是小编给大家介绍的java发送http请求详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部