我曾经使用PHP中的file_get_contents命令废弃网站以获取信息。虽然现在我每次尝试废弃网页时都会返回
<html><head><meta http-equiv="Refresh" content="0; URL=http://website.com/latest.php?ckattempt=1"></head><body></body></html>
这是我以前用过的代码
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n".
"Referer: ".$url."/index.php".
"Cookie: id=<id token>; auth=<auth token>;"
)
);
$context = stream_context_create($opts);
$html = file_get_contents($url.'/latest.php?ckattempt=0', false, $context);
我假设它与处理刷新元标记的内容有关,但有没有人知道我可以绕过这个方法的任何方法,所以我可以再次废弃网页?
答案 0 :(得分:1)
如果我正确地解释了您的问题,您的问题源于这样一个事实:在目标服务器上,您通常加载的网站已经更改。您正在加载的页面现在使用meta
标记(称为meta refresh
)将客户端转发到另一个页面(在此特定示例中为http://website.com/latest.php?ckattempt=1
),而不是旧页面。 / p>
您需要做什么(为了获取您想要阅读的数据)可能是遵循该链接,这意味着您应该加载该元标记中提供的URL并从那里读取数据。
CURL可以遵循重定向但我不完全确定它会遵循元标记,因为这是一个相当被撤销的转发方法,我不记得CURL花费了大量时间来解析传入的HTML代码(不是实际上。)
万维网联盟(W3C)不鼓励使用元刷新
在给定的情况下,您最好的选择是解析传入的数据,选择所需的信息(即URL)并加载该URL。
您可以使用正则表达式执行此操作。 See this question about which regex to use to detect a link in a string
抽象步骤:
file_get_contents()
电话meta
标记,http-equiv
属性设置为refresh
file_get_contents()
以获取您的目标数据