HTTP POST请求协议格式如下:
POST POST /formLogin HTTP/1.1
HOST: www.XXX.com
User-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0
username=jack&password=abc-123
使用springBoot构建服务端:
package com.mfz.spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class LoginController {
@GetMapping(value = "/login")
public String login(){
return "login";
}
@PostMapping(value = "/formLogin")
public String formLogin(String username, String password, Model model){
System.out.printf("username=%s,password=%s\n",username,password);
if (username != null && password != null &&
username.equals("jack") && password.equals("abc-123")){
model.addAttribute("username",username);
model.addAttribute("password",password);
return "success";
}
return "login";
}
}
创建所需要的html文件
login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>LoginPage</title>
</head>
<body>
<form action="formLogin" method="post">
username:<input type="text" name="username" /><br/>
password:<input type="text" name="password"/><br/>
<input type="submit" value="login"/>
</form>
</body>
</html>
success.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>success</title>
</head>
<body>
<table>
<tr>
<td>user</td>
<td th:text="${username}"></td>
</tr>
<tr>
<td>password</td>
<td th:text="${password}"></td>
</tr>
</table>
</body>
</html>
使用golang的net工具包模拟post请求
package main
import(
"fmt"
"io"
"net"
"strconv"
)
func main(){
post,err := net.Dial("tcp","127.0.0.1:8090") //与服务端建立连接
if err != nil {
fmt.Printf("Dial failed,err:%v\n",err)
return
}
form := "username=jack&password=abc-123" //body
header := "POST /formLogin HTTP/1.1\r\n"
header += "Host: 127.0.0.1:8090\r\n"
header += "Connection: close\r\n"
header += "Content-Type: application/x-www-form-urlencoded\r\n"
header += "Content-Length: "+strconv.Itoa(len(form))
header += "\r\n\r\n"
header += form
_,err = post.Write([]byte(header)) //向服务端发送数据
if err != nil {
fmt.Printf("send data failed,err:%v\n",err)
return
}
var buf [512]byte //定义一个缓存,用来读取指定大小的数据
for{
count,err := post.Read(buf[:])
if err != nil {
if err == io.EOF { //判断读取数据是否结束
break
}
fmt.Printf("读取数据出错:%v\n",err)
return
}
fmt.Printf("%s",string(buf[:count])) //输出读取到的数据
}
defer post.Close() //关闭连接
}