700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java的connect和http_【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

java的connect和http_【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

时间:2023-10-25 22:35:38

相关推荐

java的connect和http_【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法

Java原生的API可用于发送HTTP请求

即.URL、.URLConnection,JDK自带的类;

1.通过统一资源定位器(.URL)获取连接器(.URLConnection)

2.设置请求的参数

3.发送请求

4.以输入流的形式获取返回内容

5.关闭输入流

封装请求类

1 package com.util;

2

3 import java.io.BufferedReader;

4 import java.io.IOException;

5 import java.io.InputStream;

6 import java.io.InputStreamReader;

7 import java.io.OutputStream;

8 import java.io.OutputStreamWriter;

9 import .HttpURLConnection;

10 import .MalformedURLException;

11 import .URL;

12 import .URLConnection;

13 import java.util.Iterator;

14 import java.util.Map;

15

16 public class HttpConnectionUtil {

17

18 // post请求

19 public static final String HTTP_POST = "POST";

20

21 // get请求

22 public static final String HTTP_GET = "GET";

23

24 // utf-8字符编码

25 public static final String CHARSET_UTF_8 = "utf-8";

26

27 // HTTP内容类型。如果未指定ContentType,默认为TEXT/HTML

28 public static final String CONTENT_TYPE_TEXT_HTML = "text/xml";

29

30 // HTTP内容类型。相当于form表单的形式,提交暑假

31 public static final String CONTENT_TYPE_FORM_URL = "application/x-www-form-urlencoded";

32

33 // 请求超时时间

34 public static final int SEND_REQUEST_TIME_OUT = 50000;

35

36 // 将读超时时间

37 public static final int READ_TIME_OUT = 50000;

38

39 /**

40 *

41 * @param requestType

42 *请求类型

43 * @param urlStr

44 *请求地址

45 * @param body

46 *请求发送内容

47 * @return 返回内容

48 */

49 public static String requestMethod(String requestType, String urlStr, String body) {

50

51 // 是否有http正文提交

52 boolean isDoInput = false;

53 if (body != null && body.length() > 0)

54isDoInput = true;

55 OutputStream outputStream = null;

56 OutputStreamWriter outputStreamWriter = null;

57 InputStream inputStream = null;

58 InputStreamReader inputStreamReader = null;

59 BufferedReader reader = null;

60 StringBuffer resultBuffer = new StringBuffer();

61 String tempLine = null;

62 try {

63// 统一资源

64URL url = new URL(urlStr);

65// 连接类的父类,抽象类

66URLConnection urlConnection = url.openConnection();

67// http的连接类

68HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;

69

70// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在

71// http正文内,因此需要设为true, 默认情况下是false;

72if (isDoInput) {

73 httpURLConnection.setDoOutput(true);

74 httpURLConnection.setRequestProperty("Content-Length", String.valueOf(body.length()));

75}

76// 设置是否从httpUrlConnection读入,默认情况下是true;

77httpURLConnection.setDoInput(true);

78// 设置一个指定的超时值(以毫秒为单位)

79httpURLConnection.setConnectTimeout(SEND_REQUEST_TIME_OUT);

80// 将读超时设置为指定的超时,以毫秒为单位。

81httpURLConnection.setReadTimeout(READ_TIME_OUT);

82// Post 请求不能使用缓存

83httpURLConnection.setUseCaches(false);

84// 设置字符编码

85httpURLConnection.setRequestProperty("Accept-Charset", CHARSET_UTF_8);

86// 设置内容类型

87httpURLConnection.setRequestProperty("Content-Type", CONTENT_TYPE_FORM_URL);

88// 设定请求的方法,默认是GET

89httpURLConnection.setRequestMethod(requestType);

90

91// 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。

92// 如果在已打开连接(此时 connected 字段的值为 true)的情况下调用 connect 方法,则忽略该调用。

93httpURLConnection.connect();

94

95if (isDoInput) {

96 outputStream = httpURLConnection.getOutputStream();

97 outputStreamWriter = new OutputStreamWriter(outputStream);

98 outputStreamWriter.write(body);

99 outputStreamWriter.flush();// 刷新

100}

101if (httpURLConnection.getResponseCode() >= 300) {

102 throw new Exception(

103 "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());

104}

105

106if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

107 inputStream = httpURLConnection.getInputStream();

108 inputStreamReader = new InputStreamReader(inputStream);

109 reader = new BufferedReader(inputStreamReader);

110

111 while ((tempLine = reader.readLine()) != null) {

112resultBuffer.append(tempLine);

113resultBuffer.append("\n");

114 }

115}

116

117 } catch (MalformedURLException e) {

118// TODO Auto-generated catch block

119e.printStackTrace();

120 } catch (IOException e) {

121// TODO Auto-generated catch block

122e.printStackTrace();

123 } catch (Exception e) {

124// TODO Auto-generated catch block

125e.printStackTrace();

126 } finally {// 关闭流

127

128try {

129 if (outputStreamWriter != null) {

130outputStreamWriter.close();

131 }

132} catch (Exception e) {

133 // TODO Auto-generated catch block

134 e.printStackTrace();

135}

136try {

137 if (outputStream != null) {

138outputStream.close();

139 }

140} catch (Exception e) {

141 // TODO Auto-generated catch block

142 e.printStackTrace();

143}

144try {

145 if (reader != null) {

146reader.close();

147 }

148} catch (Exception e) {

149 // TODO Auto-generated catch block

150 e.printStackTrace();

151}

152try {

153 if (inputStreamReader != null) {

154inputStreamReader.close();

155 }

156} catch (Exception e) {

157 // TODO Auto-generated catch block

158 e.printStackTrace();

159}

160try {

161 if (inputStream != null) {

162inputStream.close();

163 }

164} catch (Exception e) {

165 // TODO Auto-generated catch block

166 e.printStackTrace();

167}

168 }

169 return resultBuffer.toString();

170 }

171

172 /**

173 * 将map集合的键值对转化成:key1=value1&key2=value2 的形式

174 *

175 * @param parameterMap

176 *需要转化的键值对集合

177 * @return 字符串

178 */

179 public static String convertStringParamter(Map parameterMap) {

180 StringBuffer parameterBuffer = new StringBuffer();

181 if (parameterMap != null) {

182Iterator iterator = parameterMap.keySet().iterator();

183String key = null;

184String value = null;

185while (iterator.hasNext()) {

186 key = (String) iterator.next();

187 if (parameterMap.get(key) != null) {

188value = (String) parameterMap.get(key);

189 } else {

190value = "";

191 }

192 parameterBuffer.append(key).append("=").append(value);

193 if (iterator.hasNext()) {

194parameterBuffer.append("&");

195 }

196}

197 }

198 return parameterBuffer.toString();

199 }

200

201 public static void main(String[] args) throws MalformedURLException {

202

203 System.out.println(requestMethod(HTTP_GET, "http://127.0.0.1:8080/test/TestHttpRequestServlet",

204 "username=123&password=我是谁"));

205

206 }

207 }

测试Servlet

1 package com.servlet;

2

3 import java.io.IOException;

4

5 import javax.servlet.ServletException;

6 import javax.servlet.http.HttpServlet;

7 import javax.servlet.http.HttpServletRequest;

8 import javax.servlet.http.HttpServletResponse;

9

10 public class TestHttpRequestServelt extends HttpServlet {

11

12

13 @Override

14 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

15

16 System.out.println("this is a TestHttpRequestServlet");

17 request.setCharacterEncoding("utf-8");

18

19 String username = request.getParameter("username");

20 String password = request.getParameter("password");

21

22 System.out.println(username);

23 System.out.println(password);

24

25 response.setContentType("text/plain; charset=UTF-8");

26 response.setCharacterEncoding("UTF-8");

27 response.getWriter().write("This is ok!");

28

29 }

30 }

web.xml配置

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 test

4

5

6 TestHttpRequestServlet

7 com.servlet.TestHttpRequestServelt

8

9

10

11 TestHttpRequestServlet

12 /TestHttpRequestServlet

13

14

15

16 index.html

17 index.htm

18 index.jsp

19 default.html

20 default.htm

21 default.jsp

22

23

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。