Golang http获取空响应。身体

时间:2014-07-31 02:50:51

标签: http web go google-drive-api

我遇到了一个问题,对于某些网址,Golang中的代码没有检索到预期的内容。我没有发布实际网址,但它有此表格,并且是指向谷歌驱动器文件下载https://docs.google.com/uc?id=somelongid&export=download的链接。如果我使用wget来获取文件,它可以正常工作。我也有使用open()的ruby代码,它也可以。出于某种原因,尽管Golang返回一个空缓冲区并且没有错误。如果我使用此代码来获取一些"普通" url像一个静态网站,它按预期工作,并返回非空响应.Body。下面是我从项目中提取的代码,以简化和缩小问题的位置。以下是输出。

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 个答案:

答案 0 :(得分:2)

也许您收到了HTTP响应错误。

例如,如果服务器以http.Get404 - Not Found回答,则

400 - Bad Request 将不会返回错误。这是因为它们不是特殊行为,它们是来自服务器的有效响应。

您应该检查resp.StatusCode并查看它是200范围内的一个。

您可以在the package documentation中查看不同的状态代码。

This question表示使用go从谷歌驱动器下载有一些问题,因为他们在网址中使用通配符,也许您可​​以尝试使用答案中列出的网址:https://googledrive.com/host/ID