阻止抓取工具执行POST表单操作

时间:2011-06-21 22:09:30

标签: http-post web-crawler

我的网站上有简单的表格:

<form method="POST" action="Home/Import"> ... </form>

由于抓取工具向HEAD发送Home/Import请求,我收到大量错误报告

通知表单是 POST

问题

  1. 为什么抓取工具会尝试抓取这些操作?
  2. 我能做些什么来阻止它? (我已经在robots.txt中安装了家)
  3. 处理那些无效(但正确)HEAD请求的好方法是什么?
  4. 详细说明:
    如果重要的话,我会使用Post-Redirect-Get模式。 平台:IIS 7.5上的ASP.NET MVC 3.0(C#)

3 个答案:

答案 0 :(得分:0)

您可以在网络服务器级别禁用头部请求...对于apache:

<LimitExcept GET POST>
deny from all
</LimitExcept>

您可以在robots.txt级别添加以下内容:

Disallow: /Home/Import

头部请求用于获取有关页面的信息,而不是获取整个页面,如上次修改时间,大小等。这是一个有效的事情。由于头部请求,您的脚本不应该出错,而这些错误可能是因为代码中缺少验证。您的代码可以检查请求http方法是否为“head”并执行不同的操作。

答案 1 :(得分:0)

1)爬虫通常会发出HEAD请求以获取响应的mime类型。

2)HEAD请求不应调用POST的动作处理程序。如果我看到我收到很多关于资源的HEAD请求,我不希望爬虫爬行,我会给它一个链接,我希望它能够爬行。大多数抓取工具都会阅读Robots.txt

答案 2 :(得分:0)

4年前但仍在回答问题#1:Google确实试图抓取POST表单,只需发送一个&#34; GET&#34;到URL和实际&#34; POST&#34;要求。见their blog on this。原因在于网络性质:糟糕的网络开发者隐藏了POST搜索表单背后的内容链接。要达到这些内容,搜索引擎必须即兴发挥。

关于#2:robots.txt的可靠性各不相同。

关于#3:超干净的方式可能是:HTTP状态405如果特别是HEAD请求是您的问题,则不允许使用方法。但不确定浏览器是否会喜欢这个。