繁体   English   中英

如何在PHP中使用file_get_contents

[英]How to use file_get_contents in php

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

我以为它与处理meta标记有关,但是有人知道我可以通过任何方式解决此问题,以便我再次删除该网页吗?

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

在此处阅读有关元刷新的信息

您需要做的(为了获得想要读取的数据)可能就是跟随该链接,这意味着您应该加载该meta标记中提供的URL并从那里读取数据。

CURL可以跟随重定向,但是我不完全确定它将跟随一个meta标记,因为这是一种相当废止的转发方法,而且我不记得CURL花费了大量时间来解析传入的HTML代码(实际上根本没有) 。

万维网联盟(W3C)不鼓励使用元刷新

在给定情况下,最好的选择是解析传入的数据,挑选所需的信息(即URL),然后加载该URL。

您可以使用正则表达式执行此操作。 请参阅有关使用哪个正则表达式来检测字符串中的链接的问题

抽象步骤:

  • 使用常见的file_get_contents()调用加载页面
  • 解析传入的页面,查看它是否包含带有设置为refreshhttp-equiv属性的meta标记
  • 如果找到此标记,请将收到的内容传递给提取目标URL的函数
  • 在该目标URL上使用file_get_contents()以获得您想要的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM