发送带有Accept:text / html的HTTP标头只会从页面下载文本吗?

时间:2010-08-03 06:14:57

标签: http http-headers

我正在编写一个简单的抓取工具,理想情况下是为了节省带宽,我只想下载页面上的文本和链接。我可以使用HTTP标头吗?我对他们的工作方式感到困惑。

3 个答案:

答案 0 :(得分:3)

是的,使用Accept: text/html时,您应该只将HTML作为有效回复。这至少应该如何。

但实际上,标准与实际实施之间存在巨大差异。正确content negotiation(这就是Accept的用途)是几乎不受支持的事情之一。

答案 1 :(得分:2)

你正在解决问题的正确方法。

我不确定您对HTTP标头有多了解,但基本上HTTP标头只是Web服务器的字符串格式 - 它遵循协议 - 在这方面非常简单。 您撰写请求并收到回复。这些请求看起来就像您在https://addons.mozilla.org/en-US/firefox/addon/3829/的Firefox插件LiveHTTPHeaders中看到的内容。

我在我的网站http://blog.gnucom.cc/2010/write-http-request-to-web-server-with-php/上写了一篇小帖子,向您展示如何向Web服务器写入请求,然后再阅读响应。如果您只接受text / html,那么您只接受Web上可用内容的一部分(所以是的,它会“优化”您的脚本到一定程度)。请注意,此示例的级别非常低,如果您要编写蜘蛛,您可能希望使用现有的库,如cURL或您的实现语言提供的任何其他工具。

答案 2 :(得分:1)

HTML页面仅包含文本和一些标记标记。

图像,脚本和样式表(通常)是从HTML标记引用的外部文件。这意味着如果您请求页面,您将只收到文本(没有图像和其他内容)。

由于您正在编写抓取工具,因此应确保它不会跟踪图片,脚本或样式表中的网址。

我不是百分百确定,但即使您发送GET /foobar.png,我相信Accept: text/html也会返回图像。出于这个原因,我认为您应该只过滤您抓取的网址类型。

此外,如果Content-Type不是text/html,您可以尝试阅读抓取工具中的响应标头并在阅读正文之前关闭连接。对于不需要的较大文件可能是值得的。