我刚开始学习围棋,这个问题让我卡住了。尝试使用 github.com/valyala/fasthttp 在测试 func 中测试本地主机上的请求处理。首先在https://github.com/valyala/fasthttp/blob/master/server_example_test.go中运行服务器:
ln, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatalf("error in net.Listen: %s", err)
}
requestHandler := func(ctx *fasthttp.RequestCtx) {
fmt.Println(ctx, "Requested path is")
}
if err := fasthttp.Serve(ln, requestHandler); err != nil {
log.Fatalf("error in Serve: %s", err)
}
那么如果我从同一个测试函数运行请求函数(FastRequest(url string))它工作正常......
Fasthttp请求函数:
func FastRequest(url string) error {
Request := &fasthttp.Request{}
Response := &fasthttp.Response{}
FastHTTPClient := &fasthttp.Client{}
Request.SetRequestURI(url)
for {
err := FastHTTPClient.DoTimeout(Request, Response, time.Minute)
switch err {
case fasthttp.ErrTimeout, fasthttp.ErrDialTimeout:
<-time.After(time.Minute * 2)
continue
case fasthttp.ErrNoFreeConns:
<-time.After(time.Minute * 2)
continue
case nil:
return nil
default:
if strings.Contains(err.Error(), "connection reset by peer") {
<-time.After(time.Minute * 2)
continue
} else {
return err
}
}
}
}
但我真正需要测试的是从我的对象发送一个请求,它在 goroutine 中实现了相同的 FastRequest 方法。在这里我收到了这个错误信息:
error when serving connection ":8080"<->":51325": error when reading request headers: invalid header key " http/1.1\r\nuser-Agent". Buffer size=206, contents: "GET here_is_request_url \n http/1.1\r\nuser-Agent: fasthttp\r\nHost: localhost:8080\r\n\r\n"
在 FastRequest 中,我没有指定任何用户代理,FastRequest() 函数是相同的。只是函数调用的地方不同。是否在 goroutine 中调用并不重要。
那么,fasthttp.RequestCtx 无法解析自己的头部?或者发生了什么?
慕妹3146593
相关分类