如何使用 go http.Client(和 App Engine urlfetch)仅下载大文件的开头

How to download only the beginning of a large file with go http.Client (and app engine urlfetch)

我试图在 go 中使用 http.Client 下载大文件的前 1kb,但似乎 response.Body 总是完全缓冲。是否可以控制缓冲量?

如果是,如何将其与 App Engine urlfetch 服务一起使用?

以下内容适用于 python 中的 App Engine urlfetch,我正在尝试将其移植到:

from urllib2 import urlopen
req = Request(url)
urlopen(req).read(1024) # Read the first 1kb.

将 "Range" 请求 Header 属性设置为 "bytes=0-1023" 应该有效。

package main

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

func main() {
    req, _ := http.NewRequest("GET", "http://example.com", nil)
    req.Header.Add("Range", "bytes=0-1023")
    fmt.Println(req)
    var client http.Client
    resp, _ := client.Do(req)
    fmt.Println(resp)
    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(len(body))
}

App Engine 中提供的 http.Client 同样适​​用。

io pkg里面还有io.LimitReader(),可以让limited reader

package main

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

func main() {
    var client http.Client
    responce, _:=client.Get("http://example.com")
    body:=responce.Body
    chunk:=io.LimitReader(body, 1024)
    stuff, _:=ioutil.ReadAll(chunk)
    //Do what you want with stuff
}