HttpSimulator.java
4.13 KB
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
package com.example.mina.http;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
/**
* @author dy
* @date 2021/3/4
*/
public class HttpSimulator {
private Socket socket;
private int port = 80;
private String host = "localhost";
private String request = ""; // HTTP请求消息
private boolean isPost, isHead;
public void run() throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
while (true) // 开始大循环
{
try {
if (!readHostAndPort(reader)) {
break;
}
readHttpRequest(reader);
sendHttpRequest();
readHttpResponse(reader);
} catch (Exception e) {
System.out.println("err:" + e.getMessage());
}
}
}
public static void main(String[] args) throws Exception {
new HttpSimulator().run();
}
private boolean readHostAndPort(BufferedReader consoleReader)
throws Exception {
System.out.print("host:port>");
String[] ss = null;
String s = consoleReader.readLine();
if (s.equals("q")) {
return false;
} else {
ss = s.split("[:]");
if (!ss[0].equals("")) {
host = ss[0];
}
if (ss.length > 1) {
port = Integer.parseInt(ss[1]);
}
System.out.println(host + ":" + String.valueOf(port));
return true;
}
}
private void readHttpRequest(BufferedReader consoleReader)
throws Exception {
System.out.println("请输入HTTP请求:");
String s = consoleReader.readLine();
request = s + "\r\n";
boolean isPost = s.substring(0, 4).equals("POST");
boolean isHead = s.substring(0, 4).equals("HEAD");
while (!(s = consoleReader.readLine()).equals("")) {
request = request + s + "\r\n";
}
request = request + "\r\n";
if (isPost) {
System.out.println("请输入POST方法的内容:");
s = consoleReader.readLine();
request = request + s;
}
}
private void sendHttpRequest() throws Exception {
socket = new Socket();
socket.setSoTimeout(10 * 1000);
System.out.println("正在连接服务器");
socket.connect(new InetSocketAddress(host, port), 10 * 1000);
System.out.println("服务器连接成功!");
OutputStream out = socket.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(out);
writer.write(request);
writer.flush();
}
private void readHttpResponse(BufferedReader consoleReader) {
String s = "";
try {
InputStream in = socket.getInputStream();
InputStreamReader inReader = new InputStreamReader(in);
BufferedReader socketReader = new BufferedReader(inReader);
System.out.println("---------HTTP头---------");
boolean b = true; // true: 未读取消息头 false: 已经读取消息头
while ((s = socketReader.readLine()) != null) {
if (s.equals("") && b == true && !isHead) {
System.out.println("------------------------");
b = false;
System.out.print("是否显示HTTP的内容(Y/N):");
String choice = consoleReader.readLine();
if (choice.equals("Y") || choice.equals("y")) {
System.out.println("---------HTTP内容---------");
continue;
} else {
break;
}
} else {
System.out.println(s);
}
}
} catch (Exception e) {
System.out.println("err:" + e.getMessage());
} finally {
try {
socket.close();
} catch (Exception e) {
}
}
System.out.println("------------------------");
}
}