Golang http Get请求返回response.Body为空

5
我遇到了一个问题,在某些URL上,Golang代码无法检索预期的内容。我不会发布实际的URL,但它具有以下形式,并且是指向Google Drive文件下载的链接:https://docs.google.com/uc?id=somelongid&export=download。如果我使用wget获取文件,则可以正常工作。我还有Ruby代码,其中使用open()也可以正常工作。但出于某种原因,Golang返回一个空缓冲区而没有错误。如果我使用此代码来获取一些“普通”的URL,例如静态网站,则按预期工作并返回非空响应。下面是我从项目中提取出的代码,以简化和缩小问题可能存在的范围。以下是输出。
package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    resp, err := http.Get("myurlishere")
    if err != nil {
        fmt.Println("Something went wrong")
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    fmt.Printf("Body: %v\n", body)
    fmt.Printf("Error: %v\n", err)
}

输出

$go run main.go
Body: []
Error: <nil>
1个回答

2
也许您会遇到HTTP响应错误。
如果服务器回答了404-未找到或400-错误请求之类的问题,http.Get不会返回错误。因为它们并不是异常行为,而是来自服务器的有效响应。
您应该检查resp.StatusCode并确保它在200范围内。
您可以在软件包文档中检查不同的状态代码。 这个问题表明使用Go从Google Drive下载存在一些问题,因为他们在URL中使用通配符,也许您可以尝试使用答案中列出的URL:https://googledrive.com/host/ID

好主意。我遇到了一个403错误,但是我不明白为什么会出现这个错误。我的等效Ruby代码和wget在完全相同的URL上都能正常工作。从wget中唯一有趣的事情是一个302重定向和一个让我觉得可能是它的奇怪警告:警告:HTTP不支持通配符。 - EntilZha
将您的建议与此结合,我得到了答案: https://dev59.com/-HXYa4cB1Zd3GeqP7o56。将其放入您的答案中,我可以标记它为已回答。 - EntilZha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接