如何使用 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
}
我试图在 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
}