詳解Java發(fā)送HTTP請(qǐng)求
前言
請(qǐng)求http的Demo是個(gè)人親測(cè)過(guò),目前該方式已經(jīng)在線上運(yùn)行著。因?yàn)槭莌ttp請(qǐng)求,所有發(fā)送post 和get 請(qǐng)求的demo都有在下方貼出,包括怎么測(cè)試,大家可直接 copy到自己的項(xiàng)目中使用。
正文
使用須知
為了避免大家引錯(cuò)包我把依賴(lài)和涉及到包路徑給大家
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;
<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 發(fā)送 get 請(qǐng)求
首先我們引入兩個(gè)包
發(fā)送get請(qǐng)求的工具類(lèi),可直接 copy 使用即可
另外,我拋出異常的代碼大家改成自己業(yè)務(wù)的異常,不需要就刪除掉。
參數(shù)說(shuō)明:
host:ip
servUri:url
reString:參數(shù)
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 發(fā)送 post 請(qǐng)求
發(fā)送post分兩種,我分兩種的原因是為了讓大家方便,想傳對(duì)象和 json 可以直接復(fù)制過(guò)用就可以用,不用你們?cè)谵D(zhuǎn)了。
第一種是直接接收json
參數(shù)明說(shuō):
url:url
json:參數(shù)
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 "無(wú)響應(yīng)";
}
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);
}
第二種是參數(shù)是對(duì)象
參數(shù)說(shuō)明:
url:url
tram:對(duì)象
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;
}
這個(gè)方法我想不用寫(xiě)測(cè)試類(lèi)大家也會(huì)用,傳過(guò)去對(duì)象和地址就可以了,很方便很簡(jiǎn)單。
以上所述是小編給大家介紹的Java發(fā)送HTTP請(qǐng)求詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
一不小心就讓Java開(kāi)發(fā)踩坑的fail-fast是個(gè)什么鬼?(推薦)
這篇文章主要介紹了Java fail-fast,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
JDBC程序更新數(shù)據(jù)庫(kù)中記錄的方法
這篇文章主要介紹了JDBC程序更新數(shù)據(jù)庫(kù)中記錄的方法,涉及Java基于JDBC操作數(shù)據(jù)庫(kù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Java源碼解析ThreadLocal及使用場(chǎng)景
今天小編就為大家分享一篇關(guān)于Java源碼解析ThreadLocal及使用場(chǎng)景,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
自己手寫(xiě)Mybatis通用batchInsert問(wèn)題
這篇文章主要介紹了自己手寫(xiě)Mybatis通用batchInsert問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
SpringBoot項(xiàng)目打成War布署在Tomcat的詳細(xì)步驟
這篇文章主要介紹了SpringBoot項(xiàng)目打成War布署在Tomcat,本文分步驟結(jié)合圖文實(shí)例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
IntelliJ IDEA中新建Java class的解決方案
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA中新建Java class的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10

