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

ali*_*ali 2 google-app-engine go

我试图http.Client在go中只下载第一个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.
Run Code Online (Sandbox Code Playgroud)

tum*_*dum 6

将"范围"请求标头属性设置为"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))
}
Run Code Online (Sandbox Code Playgroud)

同样的事情应该适用于app引擎中提供的http.Client.

  • 虽然这工作得很好(也适用于应用程序引擎),但并非所有 http 服务器都接受范围。是否有一种独立于服务器范围支持的仅客户端方法? (2认同)