一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中httpclient封裝post請求和get的請求實例

java中httpclient封裝post請求和get的請求實例

2022-03-06 00:45小碼哥(^_^) Java教程

這篇文章主要介紹了java中httpclient封裝post請求和get的請求實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

httpclient封裝post請求和get的請求

在我們程序員生涯中,經常要復用代碼,所以我們應該養成時常整理代碼的好習慣,以下是我之前封裝的

httpclient的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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package com.marco.common;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
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.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
/**
 * @author 馬弦
 * @date 2017年10月23日 下午2:49
 * HttpClient工具類
 */
public class HttpUtil {
    
    private static Logger logger = Logger.getLogger(HttpUtil.class);
 
    /**
     * get請求
     * @return
     */
    public static String doGet(String url) {
        try {
            HttpClient 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());
                
                return strResult;
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        
        return null;
    }
    
    /**
     * post請求(用于key-value格式的參數)
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, Map params){
        
        BufferedReader in = null
        try
            // 定義HttpClient 
            HttpClient client = new DefaultHttpClient(); 
            // 實例化HTTP方法 
            HttpPost request = new HttpPost(); 
            request.setURI(new URI(url));
            
            //設置參數
            List<NameValuePair> nvps = new ArrayList<NameValuePair>();
            for (Iterator iter = params.keySet().iterator(); iter.hasNext();) {
                String name = (String) iter.next();
                String value = String.valueOf(params.get(name));
                nvps.add(new BasicNameValuePair(name, value));
                
                //System.out.println(name +"-"+value);
            }
            request.setEntity(new UrlEncodedFormEntity(nvps,HTTP.UTF_8));
            
            HttpResponse response = client.execute(request); 
            int code = response.getStatusLine().getStatusCode();
            if(code == 200){    //請求成功
                in = new BufferedReader(new InputStreamReader(response.getEntity() 
                        .getContent(),"utf-8"));
                StringBuffer sb = new StringBuffer(""); 
                String line = ""
                String NL = System.getProperty("line.separator"); 
                while ((line = in.readLine()) != null) { 
                    sb.append(line + NL); 
                }
                
                in.close(); 
                
                return sb.toString();
            }
            else{   //
                System.out.println("狀態碼:" + code);
                return null;
            }
        }
        catch(Exception e){
            e.printStackTrace();
            
            return null;
        }
    }
    
    /**
     * post請求(用于請求json格式的參數)
     * @param url
     * @param params
     * @return
     */
    public static String doPost(String url, String params) throws Exception {
        
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);// 創建httpPost  
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-Type", "application/json");
        String charSet = "UTF-8";
        StringEntity entity = new StringEntity(params, charSet);
        httpPost.setEntity(entity);       
        CloseableHttpResponse response = null;
        
        try {
            
            response = httpclient.execute(httpPost);
            StatusLine status = response.getStatusLine();
            int state = status.getStatusCode();
            if (state == HttpStatus.SC_OK) {
                HttpEntity responseEntity = response.getEntity();
                String jsonString = EntityUtils.toString(responseEntity);
                return jsonString;
            }
            else{
                 logger.error("請求返回:"+state+"("+url+")");
            }
        }
        finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }  
}

httpclient是一個非常常用的工具,在項目開發的時候,經常需要請求第三方的接口,我整理好了這段代碼,以后回頭找的時候就方便啦!

HttpClient發送Get、Post請求的實踐

1. 配置及實例化HttpClient

?
1
2
3
4
5
6
private static final CloseableHttpClient httpclient;
    public static final String CHARSET = "UTF-8";      
    static{
        RequestConfig config = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(3000).build();
        httpclient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
    }

2. 發送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
/**
     * HTTP Get 獲取內容
     * @param url請求的url地址 ?之前的地址
     * @param params請求的參數
     * @param charset編碼格式
     * @return 頁面內容
     */
    public static String sendGet(String url, Map<String, Object> params) throws ParseException, UnsupportedEncodingException, IOException{       
        if(params !=null && !params.isEmpty()){        
            List<NameValuePair> pairs = new ArrayList<NameValuePair>(params.size());           
            for (String key :params.keySet()){
                pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
            }
            url +="?"+EntityUtils.toString(new UrlEncodedFormEntity(pairs), CHARSET);
        }
        
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = httpclient.execute(httpGet);
        int statusCode = response.getStatusLine().getStatusCode();
        if(statusCode !=200){
            httpGet.abort();
            throw new RuntimeException("HttpClient,error status code :" + statusCode);
        }
        HttpEntity entity = response.getEntity();
        String result = null;
        if (entity != null) {
            result = EntityUtils.toString(entity, "utf-8");
            EntityUtils.consume(entity);
            response.close();
            return result;
        }else{
            return null;
        }
    }

3. 發送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
30
31
32
33
34
35
36
37
38
39
/**
 * HTTP Post 獲取內容
 * @param url請求的url地址 ?之前的地址
 * @param params請求的參數
 * @param charset編碼格式
 * @return 頁面內容
 * @throws IOException
 * @throws ClientProtocolException
 */
 
public static String sendPost(String url, Map<String, Object> params) throws ClientProtocolException, IOException {
        List<NameValuePair> pairs = null;
        if (params != null && !params.isEmpty()) {
            pairs = new ArrayList<NameValuePair>(params.size());
            for (String key : params.keySet()) {
                pairs.add(new BasicNameValuePair(key, params.get(key).toString()));
        }
        }
        HttpPost httpPost = new HttpPost(url);
        if (pairs != null && pairs.size() > 0) {
            httpPost.setEntity(new UrlEncodedFormEntity(pairs, CHARSET));
        }
        CloseableHttpResponse response = httpclient.execute(httpPost);
        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            httpPost.abort();
            throw new RuntimeException("HttpClient,error status code :" + statusCode);
        }
        HttpEntity entity = response.getEntity();
        String result = null;
        if (entity != null) {
            result = EntityUtils.toString(entity, "utf-8");
            EntityUtils.consume(entity);
            response.close();
            return result;
        }else{
             return null;
        }
}

4. 編寫測試用例,進行Get 、Post請求方法的測試

4.1 測試Get方法,e .g:

?
1
2
3
4
5
6
7
8
@Test
public void testGet() throws ParseException, UnsupportedEncodingException, IOException {
    String testUrl01 = "具體的測試接口地址";
    Map<String, Object> params01 = new HashMap<>();
    params01.put("參數01", "對應的參數取值");
    params01.put("參數02", "對應的參數取值");
    System.out.println(sendGet(testUrl01, params01));      
}

java中httpclient封裝post請求和get的請求實例

4.2 測試Post方法,e.g:

?
1
2
3
4
5
6
7
8
@Test
    public void testPost() throws ClientProtocolException, IOException {   
        String testUrl02 = "具體的測試接口地址";
        Map<String, Object> params02 = new HashMap<>();
        params02.put("參數01", "對應的參數取值");
        params02.put("參數02", "對應的參數取值");
        System.out.println(sendPost(testUrl02, params02));     
    }

java中httpclient封裝post請求和get的請求實例

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq9808/article/details/78320816

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 脱女学小内内摸出水网站免费 | 调教扩张宫颈女人惨叫 | 全黄h全肉细节文在线观看 全彩成人18h漫画 | 向日葵视频app下载18岁以下勿看 | 青青草国产青春综合久久 | 99久久er这里只有精品17 | 天天干狠狠操 | 久草大 | 亚洲另类第一页 | 欧美一级片在线看 | 国产精品激情综合久久 | 国产在视频线在精品 | 四虎现在的网址入口2022 | 日本成人黄色网址 | mm在线 | 亚洲一卡2卡4卡5卡6卡残暴在线 | 1024在线视频精品免费 | 国产专区亚洲欧美另类在线 | 欧美va免费大片 | 亚洲精品国偷拍自产在线观看蜜臀 | 9966久久精品免费看国产 | 草草视频在线免费观看 | 99视频在线免费 | 欧美成人二区 | 北岛玲亚洲一区在线观看 | 男女视频在线观看网站 | 99ri国产在线观看 | 91制片厂制作传媒免费版樱花 | 精品亚洲欧美中文字幕在线看 | 色综合久久天天综合观看 | 香蕉国产成版人视频在线观看 | 日本熟hdx| 久久免费资源福利资源站 | www.色啪啪.com | 国产色视频网站 | 80日本xxxxxxxxx96 7个黑人玩北条麻妃 | 免费看片aⅴ免费大片 | 天堂日韩| 99热成人精品热久久669 | 精品精品国产自在久久高清 | 欧美成人在线影院 |