概述
Java解析HTTP請(qǐng)求亿胸,話不多說(shuō)上代碼:
/**
* @author sxt
* @date 2021-06-18
* @describe 自己解析請(qǐng)求
*/
public class SocketTest {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 10050);
// 創(chuàng)建請(qǐng)求流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8);
// 寫入地址等信息
outputStreamWriter.write("GET /api/cmscore/template/config/info?configId=5 HTTP/1.1\r\n");
outputStreamWriter.write("Host:localhost\r\n");
outputStreamWriter.write("Cookie:user_id=10001; timestamp=1623933567011; token=eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJVU0VSX0NFTlRFUiIsInN1YiI6IntcImlkXCI6MTAwMDEsXCJuYW1lXCI6XCLns7vnu5_nrqHnkIblkZhcIixcImVtYWlsXCI6XCJhZG1pbkBsaWx5ZW5nbGlzaC5jb21cIixcInBob25lXCI6XCIxNjgqKioqMDAwMFwiLFwic3RhdHVzXCI6MSxcInR5cGVcIjoyLFwibG9naW5EYXRlXCI6XCIyMDIxLTA2LTEzIDEwOjI5OjU2XCIsXCJleHBpcmVEYXRlXCI6XCIyMDIxLTA3LTEzIDEwOjI5OjU2XCIsXCJkdXJhdGlvblwiOjI1OTIwMDB9IiwiYXVkIjoiTElMWV9kZXYiLCJpYXQiOjE2MjM1NTEzOTYsImV4cCI6MTYyNjE0MzM5Nn0.nAEp47o61CDoY0yzB1wYuHImZtNKFwGqTUF-QGKxXpVPYV_bsKvJ1LHzA3LFjROrLoMXhttQX8UD1nyaazDPoA; source=employeecom.lily.usercenter.UserCenterApp");
outputStreamWriter.write("\r\n");
outputStreamWriter.write("\r\n");
outputStreamWriter.flush();
socket.shutdownOutput();
// 獲取輸入流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8));
String line = null;
// 循環(huán)響應(yīng)結(jié)果
while((line = bufferedReader.readLine()) != null){
System.out.println(line);
}
// 關(guān)閉流
outputStreamWriter.close();
bufferedReader.close();
socket.close();
}
}
總結(jié)
其實(shí)http協(xié)議汹想,就是特定格式的網(wǎng)絡(luò)數(shù)據(jù)包追葡,我們只需要根據(jù)不同的場(chǎng)景拼接出特定的格式审轮,就可以完成一次http請(qǐng)求肥哎。
不過(guò)現(xiàn)在已經(jīng)有很多框架,底層實(shí)現(xiàn)了對(duì)http請(qǐng)求的解析和封裝疾渣,我們無(wú)需再關(guān)注篡诽,但是在不依賴框架的情況下,還是需要知道其中原理榴捡。