好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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));      

}

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));     

     }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

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

查看更多关于java中httpclient封装post请求和get的请求实例的详细内容...

  阅读:25次