cURL的POST请求被重定向会发生什么?

之前看到一些文章讲:cURL的POST请求在经过重定向之后会变成GET请求,因此会丢失POST的参数。
如:MattkayDiary:cURL 跟随重定向

为了验证这一说法,做以下实验:
(1)新建路由before和after,/before路由为POST请求接口,/after为Any;
(2)使用cURL对其/before发出请求,查看打印的信息;

func main() {
    r := gin.Default()
    r.POST("/before", redirect)

    r.Any("/after", after)
    r.Run(":8080")
}

func redirect(ctx *gin.Context) {
    ctx.Redirect(301, "/after")
    //ctx.Redirect(302, "/after")
    //ctx.Redirect(307, "/after")
    //ctx.Redirect(308, "/after")
}

func after(ctx *gin.Context) {
    fmt.Println("after")
    fmt.Println(ctx.Request.Method)
}
# curl命令
curl -X POST localhost:8080/before

(3)执行cURL命令后,日志只能看到有30x的请求记录,并没有访问/after的痕迹,查阅资料得知,cURL并不会主动地请求重定向后的地址,如果需要其主动重定向的功能,可以添加参数-L;

curl -X POST -L localhost:8080/before

(4)再次使用cURL对/before发送POST请求,after函数接收到的Request.Method一直都是POST,不管重定向状态码是301、302还是307、308。

结论:
可见并没有如以上文章所说,“cURL的POST请求在经过重定向之后会变成GET请求”。

补充:
1.go版本为:go1.17.2
2.cURL版本为:

curl 7.79.1 (x86_64-w64-mingw32) libcurl/7.79.1 OpenSSL/1.1.1l (Schannel) zlib/1.2.11 brotli/1.0.9 zstd/1.5.0 libidn2/2.3.1 libssh2/1.10.0 nghttp2/1.45.1
Release-Date: 2021-09-22
posted @ 2022-07-25 23:35  萌子的臭狗子  阅读(607)  评论(0)    收藏  举报

载入天数...载入时分秒...