HttpURLConnection - Java网络编程

写SudaLogin Android app时,找了Java方面的网络编程方法。
HttpURLConnection作为Android官方文档中建议的网络编程库,稳定可靠,现整理如下:

HttpURLConnection - Java网络编程

1 POST报文

1.1 依赖包

1
2
3
4
5
6
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

1.2 编程示例

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
try {
// 请求的地址
String spec = "http://example.com/example";
// 根据地址创建URL对象
URL url = new URL(spec);
// 根据URL对象打开链接
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// 设置请求的方式(此例为HTTP协议POST报文)
urlConnection.setRequestMethod("POST");
// 设置请求的超时时间
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);

// 传递的数据
String data = "-->POST报文数据!<--"
System.out.println(data);

urlConnection.setDoOutput(true); // 发送POST请求必须设置允许输出
urlConnection.setDoInput(true); // 发送POST请求必须设置允许输入
//setDoInput的默认值就是true
//获取POST输出流
OutputStream os = urlConnection.getOutputStream();
os.write(data.getBytes()); // 字节流
os.flush(); // 完整发送POST报文数据

// 获取响应的输入流对象
InputStream is = urlConnection.getInputStream();
// 创建字节输出流对象
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 定义读取的长度
int len = 0;
// 定义缓冲区
byte buffer[] = new byte[1024];
// 按照缓冲区的大小,循环读取
while ((len = is.read(buffer)) != -1) { // InputStream --read-> buffer(byte[])
// 根据读取的长度写入到os对象中
baos.write(buffer, 0, len); // buffer(byte[]) --write-> ByteArrayOutputStream
}
// 返回字符串
final String result = baos.toString(); // ByteArrayOutputStream -> String
// final String result = new String(baos.toByteArray());

// 释放资源
is.close();
baos.close();

} catch (Exception e) {
e.printStackTrace();
}