如何在Go中创建HTTP会话
我目前正在使用fasthttp发送我的请求我的问题是,有没有一种方法可以进行持久会话?我需要cookies和数据来粘贴如何在Go中创建HTTP会话,go,fasthttp,Go,Fasthttp,我目前正在使用fasthttp发送我的请求我的问题是,有没有一种方法可以进行持久会话?我需要cookies和数据来粘贴 c:=fasthttp.Client{Name:“添加到购物车”} 基于你的问题,我认为你已经很清楚了,但以防万一: 会话不是在客户端启动的,而是在服务器上启动的。服务器检查是否存在特定的cookie;如果它这样做,则恢复cookie标识的会话;如果没有,它将创建一个新会话,并将标识符作为cookie发送回客户端。客户端需要做的就是将正确的cookie发送到服务器 所以,你需要
c:=fasthttp.Client{Name:“添加到购物车”}
基于你的问题,我认为你已经很清楚了,但以防万一:
会话不是在客户端启动的,而是在服务器上启动的。服务器检查是否存在特定的cookie;如果它这样做,则恢复cookie标识的会话;如果没有,它将创建一个新会话,并将标识符作为cookie发送回客户端。客户端需要做的就是将正确的cookie发送到服务器
所以,你需要读写cookies。fasthttp.Client.Post()
接口不允许您这样做。因此,界面不是很好,而是变得相当丑陋
在执行请求之前,您需要对请求
和响应
对象询问fasthttp
。完成初始请求后,您需要查看所有cookie,或者读取特定cookie。现在,您可以在下一个请求中使用这些值
我已经写了一个简短的例子,说明你将如何做到这一点
func main(){
c:=fasthttp.Client{}
//创建请求
请求:=fasthttp.AcquisiteRequest()
延迟fasthttp.ReleaseRequest(req)
req.SetRequestURI(`https://www.google.com/`)
//创建响应
resp:=fasthttp.acquisitionesponse()
延迟fasthttp.ReleaseResponse(resp)
//执行请求,写入响应对象
错误:=c.Do(请求、响应)
如果错误!=零{
恐慌(错误)
}
//循环所有Cookie;如果您只想在连续请求时发送所有内容,则此功能非常有用
resp.Header.VisitAllCookie(func(键,值[]字节){
log.Printf(“Cookie%s:%s\n”,键,值)
})
//阅读特定的cookie
nid:=fasthttp.AcquireCookie()
延迟fasthttp.ReleaseCookie(nid)
nid.SetKey(`nid`)
if响应头Cookie(nid){
Println(“NID Cookie的值:+string(NID.Value()))
//创建第二个请求并从第一个请求设置cookie
req2:=fasthttp.AcquisiteRequest()
延迟fasthttp.ReleaseRequest(请求2)
请求2.SetRequestURI(`https://www.google.com/`)
requ2.Header.SetCookie(`NID`,字符串(NID.Value())
//现在,您可以使用c.Do()再次执行此请求-别忘了获取新响应!
}
}
注意:您可以选择跳过
fasthttp.AcquireXXX()
和延迟fasthttp.ReleaseXXX(yyy)
步骤,但这将抵消使用标准net/http
带来的许多(可能是大多数)性能优势,所以,如果你走这条路,也许干脆把fasthttp
都扔到一边。我应该切换到go会话吗?或者我可以继续使用fasthttp吗?fasthttp有一个会话包:。它在fasthttp自述文件中,该包的自述文件中有代码示例。我如何将其添加到类似的内容中??因为我没有fasthttp.RequestCtx。我编辑了我的问题以包含代码。fasthttpsession
包似乎是作为服务器而不是客户端与fasthttp
一起使用的。我如何将所有cookie添加到另一个函数中的未来请求?好吧,您可以构建一个map[string]字符串
,在VisitAllCookie()中填充
并将该映射传递给另一个func(可以显式地作为参数,也可以更隐式地将该映射作为包含该func的结构上的属性)。
store, err := session.Start() // ?????
args := fasthttp.AcquireArgs()
defer fasthttp.ReleaseArgs(args)
args.Add("pid", sizepid)
args.Add("options", "[]")
args.Add("quantity", "1")
statusCode, body, err := c.Post(nil, "URL", args)
if err != nil {
panic(err)
}`