1、寫一個HttpRequestUtils工具類,包括post請求和get請求
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package
com.brainlong.framework.util.httpclient;
import
net.sf.json.JSONObject;
import
org.apache.commons.httpclient.HttpStatus;
import
org.apache.http.HttpResponse;
import
org.apache.http.client.methods.HttpGet;
import
org.apache.http.client.methods.HttpPost;
import
org.apache.http.entity.StringEntity;
import
org.apache.http.impl.client.DefaultHttpClient;
import
org.apache.http.util.EntityUtils;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
java.io.IOException;
import
java.net.URLDecoder;
public
class
HttpRequestUtils {
private
static
Logger logger = LoggerFactory.getLogger(HttpRequestUtils.
class
);
//日志記錄
/**
* httpPost
* @param url 路徑
* @param jsonParam 參數
* @return
*/
public
static
JSONObject httpPost(String url,JSONObject jsonParam){
return
httpPost(url, jsonParam,
false
);
}
/**
* post請求
* @param url url地址
* @param jsonParam 參數
* @param noNeedResponse 不需要返回結果
* @return
*/
public
static
JSONObject httpPost(String url,JSONObject jsonParam,
boolean
noNeedResponse){
//post請求返回結果
DefaultHttpClient httpClient =
new
DefaultHttpClient();
JSONObject jsonResult =
null
;
HttpPost method =
new
HttpPost(url);
try
{
if
(
null
!= jsonParam) {
//解決中文亂碼問題
StringEntity entity =
new
StringEntity(jsonParam.toString(),
"utf-8"
);
entity.setContentEncoding(
"UTF-8"
);
entity.setContentType(
"application/json"
);
method.setEntity(entity);
}
HttpResponse result = httpClient.execute(method);
url = URLDecoder.decode(url,
"UTF-8"
);
/**請求發送成功,並得到響應**/
if
(result.getStatusLine().getStatusCode() ==
200
) {
String str =
""
;
try
{
/**讀取服務器返回過來的json字符串數據**/
str = EntityUtils.toString(result.getEntity());
if
(noNeedResponse) {
return
null
;
}
/**把json字符串轉換成json對象**/
jsonResult = JSONObject.fromObject(str);
}
catch
(Exception e) {
logger.error(
"post請求提交失敗:"
+ url, e);
}
}
}
catch
(IOException e) {
logger.error(
"post請求提交失敗:"
+ url, e);
}
return
jsonResult;
}
/**
* 發送get請求
* @param url 路徑
* @return
*/
public
static
JSONObject httpGet(String url){
//get請求返回結果
JSONObject jsonResult =
null
;
try
{
DefaultHttpClient client =
new
DefaultHttpClient();
//發送get請求
HttpGet request =
new
HttpGet(url);
HttpResponse response = client.execute(request);
/**請求發送成功,並得到響應**/
if
(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**讀取服務器返回過來的json字符串數據**/
String strResult = EntityUtils.toString(response.getEntity());
/**把json字符串轉換成json對象**/
jsonResult = JSONObject.fromObject(strResult);
url = URLDecoder.decode(url,
"UTF-8"
);
}
else
{
logger.error(
"get請求提交失敗:"
+ url);
}
}
catch
(IOException e) {
logger.error(
"get請求提交失敗:"
+ url, e);
}
return
jsonResult;
}
}
|
2、寫業務代碼發送Http請求
3、MVC配置文件設置Controller掃描目錄
1
2
3
4
|
<!-- 自動掃描且只掃描
@Controller
-->
<context:component-scan base-
package
=
"com.wiselong.multichannel"
use-
default
-filters=
"false"
>
<context:include-filter type=
"annotation"
expression=
"org.springframework.stereotype.Controller"
/>
</context:component-scan>
|
4、接收Http請求
接收post請求
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
|
@Controller
@RequestMapping
(value =
"/api/platform/exceptioncenter/exceptioninfo"
)
public
class
ExceptionInfoController {
//注入
@Autowired
private
ExceptionInfoBiz exceptionInfoBiz;
/**
* 創建異常信息請求
* @param requestBody 請求消息內容
* @param request 請求消息頭
* @return jsonObject
*/
@RequestMapping
(
value=
"/create"
,
method = RequestMethod.POST
)
public
ModelAndView createExceptionInfo(
@RequestBody
String requestBody, HttpServletRequest request) {
JSONObject jsonObject = JSONObject.fromObject(requestBody);
ComExceptionInfo comExceptionInfo =
new
ComExceptionInfo();
comExceptionInfo.setProjectName(jsonObject.getString(
"projectName"
));
comExceptionInfo.setTagName(jsonObject.getString(
"tagName"
));
exceptionInfoBiz.insert(comExceptionInfo);
//返回請求結果
JSONObject result=
new
JSONObject();
result.put(
"success"
,
"true"
);
return
new
ModelAndView(
""
, ResponseUtilsHelper.jsonSuccess(result.toString()));
}
}
|
接收get請求
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
|
@Controller
@RequestMapping
(value=
"/api/platform/messagecenter/messages/sms"
)
public
class
SmsController {
@Autowired
SmsSendBiz smsSendBiz;
/**
* 接收手機號碼和內容往短信發送表插入一條記錄
* @param requestbody 請求消息內容
* @param request 請求消息頭
* @return jsonObject
*/
@RequestMapping
(
value=
"/send"
,
method= RequestMethod.GET
)
public
ModelAndView sendSms(
@RequestBody
String requestbody, HttpServletRequest request) {
//獲取請求URL及url后面傳輸的參數
String url = request.getRequestURL() +
"?"
+ request.getQueryString();
url = BuildRequestUrl.decodeUrl(url);
String telePhone = RequestUtils.getStringValue(request,
"telePhone"
);
String content = RequestUtils.getStringValue(request,
"content"
);
smsSendBiz.insertTtMsQuequ(telePhone,content);
return
new
ModelAndView(
""
, ResponseUtilsHelper.jsonResult(
""
,
true
));
}
}
二.
get
post
三.
Http協議的重要性相信不用我多說了,HttpClient相比傳統JDK自帶的URLConnection,增加了易用性和靈活性(具體區別,日后我們再討論),它不僅是客戶端發送Http請求變得容易,而且也方便了開發人員測試接口(基於Http協議的),即提高了開發的效率,也方便提高代碼的健壯性。因此熟練掌握HttpClient是很重要的必修內容,掌握HttpClient后,相信對於Http協議的了解會更加深入。 一、簡介HttpClient是Apache Jakarta Common下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議最新的版本和建議。HttpClient已經應用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。 下載地址: http://hc.apache.org/downloads.cgi 二、特性1. 基於標准、純凈的java語言。實現了Http1.0和Http1.1 2. 以可擴展的面向對象的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。 3. 支持HTTPS協議。 4. 通過Http代理建立透明的連接。 5. 利用CONNECT方法通過Http代理建立隧道的https連接。 6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。 7. 插件式的自定義認證方案。 8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。 9. 連接管理器支持多線程應用。支持設置最大連接數,同時支持設置每個主機的最大連接數,發現並關閉過期的連接。 10. 自動處理Set-Cookie中的Cookie。 11. 插件式的自定義Cookie策略。 12. Request的輸出流可以避免流中內容直接緩沖到socket服務器。 13. Response的輸入流可以有效的從socket服務器直接讀取相應內容。 14. 在http1.0和http1.1中利用KeepAlive保持持久連接。 15. 直接獲取服務器發送的response code和 headers。 16. 設置連接超時的能力。 17. 實驗性的支持http1.1 response caching。 18. 源代碼基於Apache License 可免費獲取。 三、使用方法 使用HttpClient發送請求、接收響應很簡單,一般需要如下幾步即可。 1. 創建HttpClient對象。 2. 創建請求方法的實例,並指定請求URL。如果需要發送GET請求,創建HttpGet對象;如果需要發送POST請求,創建HttpPost對象。 3. 如果需要發送請求參數,可調用HttpGet、HttpPost共同的setParams(HetpParams params)方法來添加請求參數;對於HttpPost對象而言,也可調用setEntity(HttpEntity entity)方法來設置請求參數。 4. 調用HttpClient對象的execute(HttpUriRequest request)發送請求,該方法返回一個HttpResponse。 5. 調用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取服務器的響應頭;調用HttpResponse的getEntity()方法可獲取HttpEntity對象,該對象包裝了服務器的響應內容。程序可通過該對象獲取服務器的響應內容。 6. 釋放連接。無論執行方法是否成功,都必須釋放連接 四、實例
|