Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Go中创建HTTP会话_Go_Fasthttp - Fatal编程技术网

如何在Go中创建HTTP会话

如何在Go中创建HTTP会话,go,fasthttp,Go,Fasthttp,我目前正在使用fasthttp发送我的请求我的问题是,有没有一种方法可以进行持久会话?我需要cookies和数据来粘贴 c:=fasthttp.Client{Name:“添加到购物车”} 基于你的问题,我认为你已经很清楚了,但以防万一: 会话不是在客户端启动的,而是在服务器上启动的。服务器检查是否存在特定的cookie;如果它这样做,则恢复cookie标识的会话;如果没有,它将创建一个新会话,并将标识符作为cookie发送回客户端。客户端需要做的就是将正确的cookie发送到服务器 所以,你需要

我目前正在使用fasthttp发送我的请求我的问题是,有没有一种方法可以进行持久会话?我需要cookies和数据来粘贴

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)
}`