【问题标题】:How to retrieve html document size from url in golang如何从golang中的url检索html文档大小
【发布时间】:2015-09-08 14:10:03
【问题描述】:

我使用 GoQuery 检索 HTML 文档中的一些值。 现在我需要获取 HTML 文档的大小(不含资产)
在 Firefox 中,它就像工具一样简单 --> 页面信息(常规)选项卡显示 HTML 文档的大小。
我也尝试了net/html 包,但我找不到给定 URL 的返回 HTML 的大小。有什么线索吗?

【问题讨论】:

  • 响应中的 Content-Length 标头。
  • response.ContentLength 是返回-1,表示未知长度-(

标签: html go document


【解决方案1】:

通过以下方式获取文档:

res, err := http.Get(url)
if err != nil {
    // handle error
}
defer res.Body.Close()

现在你可以:

body, err := ioutil.ReadAll(res.Body)
if err != nil {
    // handle error
}
l := len(body)

与 GoQuery 一起使用:

utfBody, err := iconv.NewReader(res.Body, charset, "utf-8")
if err != nil {
    // handler error
}

doc, err := goquery.NewDocumentFromReader(utfBody)
if err != nil {
    // handler error
}

有关 GoQuery 和读者的更多数据是here

【讨论】:

  • len() 函数不适用于 res.Body,即 io.Reader。我需要以 kb 为单位的 HTML 文档大小。
  • 谢谢,这是我们在 golang 中返回的以 kb 为单位的 HTML 文档大小的最接近的值:float32(len(body) / 1024) 但是,这个值仍然与 Firefox 的 Page Info 值不匹配 -(
  • @ShahIsmail, this value still doesn't match with the Page Info value of Firefox - 为什么应该这样做? Firefox 中的该值是 所有响应 的字节大小,包括 HTTP 标头,而不仅仅是返回的 html 代码的大小。如果您需要整个传输的字节数,请检查 res.Headers 属性并将每个标头的总大小添加到结果长度
  • @ShahIsmail,您要检查静态页面还是动态页面?它是公共 URL 还是基于用户会话的 URL?您是否验证了两个 HTML 与 Firefox 和 http.Get(url) 比较的内容是否相同。
  • @ShahIsmail Firefox 可能会显示 gzip 后的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2011-12-22
  • 1970-01-01
  • 2016-11-23
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多