【发布时间】:2021-10-12 18:00:11
【问题描述】:
我正在尝试在“https://speed.hetzner.de/100MB.bin”上发出 HEAD 请求以获取文件的元数据。我收到了 EOF 错误响应。但是,对于同一个 URL,GET 请求是成功的。
可能的原因是什么?
我怀疑服务器已经阻塞了 HEAD 请求,但是我该如何验证呢?
PS:添加代码:
func BuildRequest(method string, url string) (*http.Request, error) {
r, err := http.NewRequest(method, url, nil)
r.Header.Set("User-Agent", "my app")
return r, err
}
func (m *FileMeta) Fetch(url string) error {
r, err := BuildRequest(http.MethodHead, url)
if err != nil {
return err
}
resp, err := HTTPClient().Do(r)
if err != nil {
return err
}
defer resp.Body.Close()
}
【问题讨论】:
-
@paulsm4 用代码更新了我的问题。
-
问:您是否确认可以独立于 Go 获得有效的 HEAD 响应(您是否尝试过 curl、Postman 或类似的工具?他们是否使用 HEADER 信息响应?)问:您是否找到了一个可行的“ Go”代码解决方案(例如
http.Head())?请告诉我们! -
我确实尝试过使用 Postman,但它没有响应 HEADER 信息。我试过 Curl,它说“服务器的回复是空的”。
-
``` resp, err := http.Head("speed.hetzner.de/100MB.bin") if err != nil { return err } ``` 按照你的建议尝试了上面的代码。它抛出相同的“ EOF”错误。
-
酷 - 谢谢。所以听起来你最初的猜测是正确的:1)你的代码没问题:你没有“做错任何事”(比如试图阅读不存在的“身体”)。 2) 相反,该特定 URL (speed.hetzner.de) 正在阻止(或至少拒绝处理)HEAD 请求。
标签: rest go eof http-error