详解Java发送HTTP请求

网友投稿 351 2023-01-10


详解Java发送HTTP请求

前言

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

正文

使用须知

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

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;

org.apache.httpcomponents

httpcore

4.4.8

org.apache.httpcomponents

httpclient

4.5.3

HTTP 发送 get 请求

首先我们引入两个包

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

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

参数说明:

host:ip

servUri:url

reString:参数

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:参数

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() + "";

}

@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:对象

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请求详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:自动化接口测试的意义(自动化接口测试的意义是什么)
下一篇:详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~