Я только начал изучать Go, и этот вопрос застрял. Попытка проверить обработку запросов на локальном хосте в веселом тестировании c с использованием github.com/valyala/fasthttp. Сначала запускается сервер, как в 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)
}
, затем, если я запускаю запрос fun c (FastRequest (строка URL)) из той же функции тестирования, он работает нормально ...
Fasthttp fun fun c:
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
}
}
}
}
Но мне действительно нужно проверить отправку запроса от моего объекта, который реализует тот же метод FastRequest в goroutine. И здесь у меня появляется это сообщение об ошибке:
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 не может разобрать свой собственный заголовок? или что происходит?
=========================================== ==================================== Кроме того, я должен был добавить, что в первом случае я использовал fasthttp v1.6.0, когда я изменил его на 1.8.0, ошибка была:
error when serving connection ":8080"<->":57093": error when reading request headers: invalid header name. Buffer size=215, contents: "GET here_is_request_url\n HTTP/1.1\r\nUser-Agent: fasthttp\r\nHost: localhost:8080\r\n\r\n"
И, наконец, проблема была в добавлении "/ n" в конце URL, который работает на реальных серверах , мой маленький локальный сервер не мог справиться с этим.