gpt4 book ai didi

forms - 使用 http.Client 创建一个损坏的表单

转载 作者:行者123 更新时间:2023-12-04 07:49:32 26 4
gpt4 key购买 nike

如何使用 http.Client 创建用于测试目的的“损坏”表单这将在 ParseForm() 上触发响应错误在处理函数中?
我有以下代码:

func (app *App) signupUser(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err != nil { // how to trigger this if statement?
sendStatus(w, http.StatusBadRequest, "error parsing form")
return
}
...
然后在测试期间我使用 http.Client测试这个 Controller :
resp, err = client.PostForm(ts.URL+"/user/signup", url.Values{
"email": {testEmail},
"password": {goodPassword},
)
if err != nil {
t.Error(err) // I never get here
}

最佳答案

首先client.PostForm将正确填充帖子表单,因此您必须手动填充它。
然后,如果您深入了解 r.ParseForm() 的调用堆栈,你最终会到达错误生产者(除非阅读问题等):"net/url".QueryUnescape它“如果任何 % 后面没有跟两个十六进制数字,则返回错误。”
因此,例如:

    r := &http.Request{
// ensures it reads the body
Method: "POST",
// string with bad url encoding '%3z'
Body: io.NopCloser(strings.NewReader("foo%3z1%26bar%3D2")),
// ensures it parses the body as post form
Header: map[string][]string{
"Content-Type": []string{
"application/x-www-form-urlencoded",
},
},
}
err := r.ParseForm()
if err == nil {
panic("no err")
}
// err -> invalid URL escape "%3z"

关于forms - 使用 http.Client 创建一个损坏的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67047523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com