如何在php中使用file_get_contents

时间:2013-12-18 21:23:21

标签: php html

我曾经使用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);

我假设它与处理刷新元标记的内容有关,但有没有人知道我可以绕过这个方法的任何方法,所以我可以再次废弃网页?

1 个答案:

答案 0 :(得分:1)

如果我正确地解释了您的问题,您的问题源于这样一个事实:在目标服务器上,您通常加载的网站已经更改。您正在加载的页面现在使用meta标记(称为meta refresh)将客户端转发到另一个页面(在此特定示例中为http://website.com/latest.php?ckattempt=1),而不是旧页面。 / p>

Read about meta refresh here

您需要做什么(为了获取您想要阅读的数据)可能是遵循该链接,这意味着您应该加载该元标记中提供的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
  • 如果找到此标记,请将收到的内容传递给提取目标URL的函数
  • 在目标网址上使用file_get_contents()以获取您的目标数据