gpt4 book ai didi

go - 使用 csrf 测试 post 方法

转载 作者:IT王子 更新时间:2023-10-29 01:33:50 26 4
gpt4 key购买 nike

我正在尝试编写一个测试方法来注册我的 revel 应用程序。看下面的代码

package tests

import "github.com/revel/revel"
import "github.com/PuerkitoBio/goquery"
import "bytes"
import "net/url"

//import "net/http"

var csrf string

type AccountTest struct {
revel.TestSuite
}

func (self *AccountTest) Before() {
//println("Set up")
}

func (self *AccountTest) TestGetSignUp() {
self.Get("/signup")
site := bytes.NewBuffer(self.ResponseBody)
doc, _ := goquery.NewDocumentFromReader(site)
doc.Find("input").Each(func(i int, s *goquery.Selection) {
name, exists := s.Attr("name")
if name == "csrf_token" && exists {
csrf, _ = s.Attr("value")
}
})
self.AssertOk()
self.AssertContains("Sign Up")
self.AssertContentType("text/html; charset=utf-8")
}

func (self *AccountTest) TestPostSignUp() {
self.PostForm("/signup", url.Values{
"name": {"cormier"},
"email": {"cormisample.com"},
"emailConfirm": {"cormier@sample.com"},
"password": {"Test!1234"},
"termof": {"true"},
"csrf_token": {csrf},
})
self.AssertOk()
self.AssertContentType("text/html; charset=utf-8")
}

func (self *AccountTest) After() {
//println("Tear down")
}

测试没有通过 TestPostSignUp 函数,似乎请求被我实现的 csrf 中间件拒绝了 revel-csrf .正如您在上面看到的,我读取了 csrf token 并保存到变量 (csrf) 中。通过 Postform 请求,我传递了变量,但不起作用。

我的问题是,如何使用将通过 csrf 保护的 post 请求进行测试。

最佳答案

我解决了以下问题:

package tests

import "github.com/revel/revel"
import "github.com/PuerkitoBio/goquery"
import "bytes"
import "net/url"

//import "net/http"

var csrf string

type AccountTest struct {
revel.TestSuite
}

func (self *AccountTest) Before() {

self.Get("/signup")
site := bytes.NewBuffer(self.ResponseBody)
doc, _ := goquery.NewDocumentFromReader(site)
doc.Find("input").Each(func(i int, s *goquery.Selection) {
name, exists := s.Attr("name")
if name == "csrf_token" && exists {
csrf, _ = s.Attr("value")
}
})

}

func (self *AccountTest) TestSignUp() {

self.PostForm("/signup", url.Values{
"name": {"cormier"},
"email": {"cormier@sample.com"},
"emailConfirm": {"cormier@sample.com"},
"password": {"Test!1234"},
"termof": {"true"},
"csrf_token": {csrf},
})
self.AssertOk()
self.AssertContentType("text/html; charset=utf-8")
}

func (self *AccountTest) After() {
}

关于go - 使用 csrf 测试 post 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035816/

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