java利用java.net.URLConnection发送HTTP请求的方法详解

2025-05-29 0 82

一、前言

如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求

Java有原生的API可用于发送HTTP请求,即java.net.URLjava.net.URLConnection,这些API很好用、很常用,但不够简便;

所以,也流行有许多Java HTTP请求的framework,如,Apache的HttpClient。

目前项目主要用到Java原生的方式,所以,这里主要介绍此方式。

二、运用原生Java Api发送简单的Get请求、Post请求步骤

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

2.设置请求的参数

3.发送请求

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

5.关闭输入流

三、发送请求与接收响应流类 HttpRequestor

?

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

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247
package me.http;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;

import java.net.InetSocketAddress;

import java.net.Proxy;

import java.net.URL;

import java.net.URLConnection;

import java.util.Iterator;

import java.util.Map;

public class HttpRequestor {

private String charset = "utf-8";

private Integer connectTimeout = null;

private Integer socketTimeout = null;

private String proxyHost = null;

private Integer proxyPort = null;

/**

* Do GET request

* @param url

* @return

* @throws Exception

* @throws IOException

*/

public String doGet(String url) throws Exception {

URL localURL = new URL(url);

URLConnection connection = this.openConnection(localURL);

HttpURLConnection httpURLConnection = (HttpURLConnection)connection;

httpURLConnection.setRequestProperty("Accept-Charset", charset);

httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

InputStream inputStream = null;

InputStreamReader inputStreamReader = null;

BufferedReader reader = null;

StringBuffer resultBuffer = new StringBuffer();

String tempLine = null;

//响应失败

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

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

}

try {

inputStream = httpURLConnection.getInputStream();

inputStreamReader = new InputStreamReader(inputStream);

reader = new BufferedReader(inputStreamReader);

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

resultBuffer.append(tempLine);

}

} finally {

if (reader != null) {

reader.close();

}

if (inputStreamReader != null) {

inputStreamReader.close();

}

if (inputStream != null) {

inputStream.close();

}

}

return resultBuffer.toString();

}

/**

* Do POST request

* @param url

* @param parameterMap

* @return

* @throws Exception

*/

public String doPost(String url, Map parameterMap) throws Exception {

/* Translate parameter map to parameter date string */

StringBuffer parameterBuffer = new StringBuffer();

if (parameterMap != null) {

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

String key = null;

String value = null;

while (iterator.hasNext()) {

key = (String)iterator.next();

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

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

} else {

value = "";

}

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

if (iterator.hasNext()) {

parameterBuffer.append("&");

}

}

}

System.out.println("POST parameter : " + parameterBuffer.toString());

URL localURL = new URL(url);

URLConnection connection = this.openConnection(localURL);

HttpURLConnection httpURLConnection = (HttpURLConnection)connection;

httpURLConnection.setDoOutput(true);

httpURLConnection.setRequestMethod("POST");

httpURLConnection.setRequestProperty("Accept-Charset", charset);

httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

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

OutputStream outputStream = null;

OutputStreamWriter outputStreamWriter = null;

InputStream inputStream = null;

InputStreamReader inputStreamReader = null;

BufferedReader reader = null;

StringBuffer resultBuffer = new StringBuffer();

String tempLine = null;

try {

outputStream = httpURLConnection.getOutputStream();

outputStreamWriter = new OutputStreamWriter(outputStream);

outputStreamWriter.write(parameterBuffer.toString());

outputStreamWriter.flush();

//响应失败

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

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

}

//接收响应流

inputStream = httpURLConnection.getInputStream();

inputStreamReader = new InputStreamReader(inputStream);

reader = new BufferedReader(inputStreamReader);

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

resultBuffer.append(tempLine);

}

} finally {

if (outputStreamWriter != null) {

outputStreamWriter.close();

}

if (outputStream != null) {

outputStream.close();

}

if (reader != null) {

reader.close();

}

if (inputStreamReader != null) {

inputStreamReader.close();

}

if (inputStream != null) {

inputStream.close();

}

}

return resultBuffer.toString();

}

private URLConnection openConnection(URL localURL) throws IOException {

URLConnection connection;

if (proxyHost != null && proxyPort != null) {

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));

connection = localURL.openConnection(proxy);

} else {

connection = localURL.openConnection();

}

return connection;

}

/**

* Render request according setting

* @param request

*/

private void renderRequest(URLConnection connection) {

if (connectTimeout != null) {

connection.setConnectTimeout(connectTimeout);

}

if (socketTimeout != null) {

connection.setReadTimeout(socketTimeout);

}

}

/*

* Getter & Setter

*/

public Integer getConnectTimeout() {

return connectTimeout;

}

public void setConnectTimeout(Integer connectTimeout) {

this.connectTimeout = connectTimeout;

}

public Integer getSocketTimeout() {

return socketTimeout;

}

public void setSocketTimeout(Integer socketTimeout) {

this.socketTimeout = socketTimeout;

}

public String getProxyHost() {

return proxyHost;

}

public void setProxyHost(String proxyHost) {

this.proxyHost = proxyHost;

}

public Integer getProxyPort() {

return proxyPort;

}

public void setProxyPort(Integer proxyPort) {

this.proxyPort = proxyPort;

}

public String getCharset() {

return charset;

}

public void setCharset(String charset) {

this.charset = charset;

}

}

四、为测试方便,新建一个项目,并新建一个Servlet,接收post请求并对HttpRequestor请求响应,发出响应流

java利用java.net.URLConnection发送HTTP请求的方法详解

LoginServlet.java代码:此处使用了

注解: @WebServlet("/LoginServlet") ,也可以在web.xml配置Servlet

?

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
package me.loginServlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class LoginServlet

*/

@WebServlet("/LoginServlet")

public class LoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public LoginServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

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

// TODO Auto-generated method stub

System.out.println("111");

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

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

// TODO Auto-generated method stub

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

String blog = request.getParameter("blog");

System.out.println(username);

System.out.println(blog);

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

response.setCharacterEncoding("UTF-8");

//响应流

response.getWriter().write("It is ok!");

}

}

五.测试类Test.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
package me.http;

import java.util.HashMap;

import java.util.Map;

public class Test {

public static void main(String[] args) {

/* Post Request */

Map dataMap = new HashMap();

dataMap.put("username", "Nick Huang");

dataMap.put("blog", "IT");

try {

System.out.println(new HttpRequestor().doPost("http://localhost:8081/TestProgect2/LoginServlet", dataMap));

//System.out.println(new HttpRequestor().doGet("http://localhost:8081/TestProgect2/LoginServlet"));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

/* Get Request */

}

}

1.接收post请求类LoginServlet,控制台测试结果

java利用java.net.URLConnection发送HTTP请求的方法详解

2.HttpRequestor接收LoginServlet返回的流

java利用java.net.URLConnection发送HTTP请求的方法详解

OK,完成

六.对于接收TestProgect2项目中LoginServlet.java类返回的流,在真实环境中可能是异步接收返回的流的,当一台机器A向另外一台机器B发送请求,B接收到A的信息,将信息处理后,需要将处理结果返回即响应返回给A,A会接收到B返回的信息

可以另外建一个Servlet类HttpListenerServlet.java来专门异步接收返回的信息

?

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
package me.http;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class HttpListenerServlet

*/

@WebServlet("/HttpListenerServlet")

public class HttpListenerServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

/**

* @see HttpServlet#HttpServlet()

*/

public HttpListenerServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

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

// TODO Auto-generated method stub

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

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

// TODO Auto-generated method stub

InputStream inputStream = null;

inputStream = request.getInputStream();

InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

BufferedReader reader = new BufferedReader(inputStreamReader);

String tempLine = null;

StringBuffer resultBuffer=new StringBuffer();

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

resultBuffer.append(tempLine);

}

System.out.println(resultBuffer.toString());

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。

原文链接:http://www.cnblogs.com/cl1255674805/p/5708735.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java利用java.net.URLConnection发送HTTP请求的方法详解 https://www.kuaiidc.com/116392.html

相关文章

发表评论
暂无评论