首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Delphi TidHttp爬行时检测客户端重定向

问使用Delphi TidHttp爬行时检测客户端重定向
EN

Stack Overflow用户
提问于 2019-07-29 02:52:13
回答 1查看 434关注 0票数 3

我是一个developer,任务是为面向公众的网站进行<title>和meta描述和关键词的爬行。

这很好,直到我遇到一个网站,自我重定向,没有重定向HTTP 302/301。

例如,如果我在url中键入example.com,它将自动跳转到example-b.com (但在客户端),而不是通过HTTP 301或302。

我的目标是获得example-b.com的标题、描述和关键字。

如果这有帮助的话,我在德尔菲中使用TidHttp。

编辑

我尝试过这个回答,但据说它只适用于HTTP301和302。我已经处理过那些重定向了。我试图弄清楚如何处理<meta>引用标记或其他进行重定向的html命令。

编辑2

刚刚找到以下命令:

代码语言:javascript
复制
<meta http-equiv="refresh" content="5;url=http://thisinterestsme.com/detecting-ajax-requests-with-php/">
header( "refresh:5;url=http://thisinterestsme.com/php-forcing-https-over-http/" );
header('Location: http://thisinterestsme.com/php-forcing-https-over-http/');
window.location.href= 'http://thisinterestsme.com/php-forcing-https-over-http/';

如果我错过了其他命令,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2019-07-29 16:03:35

TIdHTTP 不遵循元刷新重定向,即使HandleRedirects设置为True。但是,如果属性<meta http-equiv=... HTTPOptions of TIdHTTP中没有包含hoNoParseMetaHTTPEquiv,则解析TIdHTTP。默认情况下,该选项不包括在内。执行请求后,您可以通过IdHTTP.MetaHTTPEquiv访问解析的值,这是IdHTTP.Response.MetaHTTPEquiv的缩写。

因为Indy不处理它,所以您必须自己处理它,您必须从值解析URL、执行重定向和检测循环/无限重定向。Refresh头也是如此,它不是官方标准的一部分。

Location标头仅对201 Created、202 Accepted和3xx状态代码有效。它只应该在状态代码为3xx (304 Not Modified除外)时重定向,而Indy已经这样做了,所以您不需要以任何特殊的方式处理这个问题。

最后,为了支持JavaScript重定向,使得任务的复杂度更高,TIdHTTP无法破解。这似乎是无头浏览器的用例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57246678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档