为了账号安全,请及时绑定邮箱和手机立即绑定

如何在golang中有效地存储对文件的html响应

如何在golang中有效地存储对文件的html响应

Go
缥缈止盈 2021-12-07 15:53:21
我正在尝试在 Golang 中构建一个爬虫。我正在使用net/http库从 url 下载 html 文件。我正在尝试保存http.resp并保存http.Header到文件中。如何将这两个文件从各自的格式转换为字符串,以便将其写入文本文件。我还看到了之前关于解析存储的 html 响应文件的问题。 在 Go 中解析来自文本文件的 HTTP 请求和响应。有没有办法以这种格式保存 url 响应。
查看完整描述

3 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

Go 有一个带有响应转储的 httputil 包。 https://golang.org/pkg/net/http/httputil/#DumpResponse。响应转储的第二个参数是是否包含正文的布尔值。因此,如果您只想将标题保存到文件中,请将其设置为 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)

}


查看完整回答
反对 回复 2021-12-07
?
炎炎设计

TA贡献1808条经验 获得超4个赞

编辑:感谢@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)

}


查看完整回答
反对 回复 2021-12-07
?
白衣非少年

TA贡献1155条经验 获得超0个赞

您还可以从响应中获取标题,如下所示:


for header, values := range resp.Header {

    for _, value := range values {

        log.Printf("\t\t %s %s", header, value)

    }

}


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信