我正在嘗試在Golang中構建爬網程序。我正在使用net/http
庫從url下載html文件。我正在嘗試將http.resp
和http.Header
保存到文件中。如何在golang中高效地存儲html響應文件
如何將這兩個文件從各自的格式轉換爲字符串,以便它可以寫入文本文件。
我還看到一個問題,前面解析一個存儲的HTML響應文件。 Parse HTTP requests and responses from text file in Go。有什麼方法可以保存這種格式的URL響應。
我正在嘗試在Golang中構建爬網程序。我正在使用net/http
庫從url下載html文件。我正在嘗試將http.resp
和http.Header
保存到文件中。如何在golang中高效地存儲html響應文件
如何將這兩個文件從各自的格式轉換爲字符串,以便它可以寫入文本文件。
我還看到一個問題,前面解析一個存儲的HTML響應文件。 Parse HTTP requests and responses from text file in Go。有什麼方法可以保存這種格式的URL響應。
編輯:感謝@JimB爲指向http.Response.Write方法,這使得比我在開始的時候提出這個容易很多:
resp, err := http.Get("http://google.com/")
if err != nil{
log.Panic(err)
}
f, err := os.Create("output.txt")
defer f.Close()
resp.Write(f)
這是我的第一個答案
你可以做這樣的事情:
resp, err := http.Get("http://google.com/")
body, err := ioutil.ReadAll(resp.Body)
// write whole the body
err = ioutil.WriteFile("body.txt", body, 0644)
if err != nil {
panic(err)
}
這是編輯我的第一個答案:
感謝@Hector Correa誰添加標題部分。這是一個更全面的片段,針對您的整個問題。這寫頭,隨後請求的身體OUTPUT.TXT
//get the response
resp, err := http.Get("http://google.com/")
//body
body, err := ioutil.ReadAll(resp.Body)
//header
var header string
for h, v := range resp.Header {
for _, v := range v {
header += fmt.Sprintf("%s %s \n", h, v)
}
}
//append all to one slice
var write []byte
write = append(write, []byte(header)...)
write = append(write, body...)
//write it to a file
err = ioutil.WriteFile("output.txt", write, 0644)
if err != nil {
panic(err)
}
繼答案通過@Riscie你也可以拿起從響應頭像這樣的東西:
for header, values := range resp.Header {
for _, value := range values {
log.Printf("\t\t %s %s", header, value)
}
}
Go有一個包含響應轉儲的httputil包。 https://golang.org/pkg/net/http/httputil/#DumpResponse。 響應轉儲的第二個參數是是否包含正文的bool。所以如果你只想把文件頭保存到一個文件中,將其設置爲false。
將轉儲到一個文件中的響應的一個例子的功能可以是:
import (
"io/ioutil"
"net/http"
"net/http/httputil"
)
func dumpResponse(resp *http.Response, filename string) error {
dump, err := httputil.DumpResponse(resp, true)
if err != nil {
return err
}
return ioutil.WriteFile(filename, dump, 0644)
}
也見['http.Response.Write'](https://golang.org/pkg/net/http/ #Response.Write)方法,由['httputil.DumpResponse'](https://golang.org/pkg/net/http/httputil/#DumpResponse)使用 – JimB