golang使用net工具包模拟post form请求

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() //关闭连接

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值