【问题标题】:php file_get_contents with javascript redirect带有 javascript 重定向的 php file_get_contents
【发布时间】:2013-02-22 16:36:29
【问题描述】:

网址 = http://www.homegate.ch/mieten/immobilie-suchen

有人可以向我解释以下内容:当我在浏览器中请求 url 时,没有问题(一切正常)。但是如果我用 PHP 的 file_get_contents 请求 url,就会有一个重定向循环:

echo file_get_contents('http://www.homegate.ch/mieten/immobilie-suchen');

我发现这个循环是由 JS 完成的,但我不知道如何用 PHP 解决这个问题。我应该改用 curl 吗?但是我怎样才能遵循这个由 javascript 完成的重定向呢?

希望你能帮助我,谢谢!

【问题讨论】:

  • file_get_contents 不遵循 Javascript 重定向。它不能,因为它不评估它们。你是怎么得出这个结论的?
  • 问题是,我花了几个小时寻找解决方案(使用 curl、zend_http_client 等),但我总是使用这个特定的 URL 得到这个烦人的重定向循环。不知道我该如何正确处理这个问题。重定向后我需要页面的内容。我也读了这篇文章follow redirects with curl in php,但它不起作用......
  • 请描述重定向。它是由网站基于防止抓取(u-a)执行的吗?或者它只是出现在你的页面上,在你写出来后未经过滤(给定你的例子)?然后过滤掉 HTML/JS 重定向代码。
  • 有一个window.location.reload(true);源代码中的声明。我认为这会让 file_get_contents 以重定向结束。但在浏览器中,这没有问题。所以我不明白区别......
  • 上次,file_get_contents 没有重定向。如果您让 window.location.reload 未经过滤地通过 echo,浏览器就会这样做。

标签: php


【解决方案1】:

使用curl 代替file_get_contents() 来获取数据:

它将数据表示为客户端,

它允许您使用许多不同类型的协议连接到许多不同类型的服务器并与之通信。 libcurl 目前支持 http、https、ftp、gopher、telnet、dict、file 和 ldap 协议`

function get_data ($uri) {
    if (!function_exists('curl_init')){ 
    die('Curl is not installed!');
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $uri);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

如果没有解决这个问题,这是因为 Javascript 不允许 curl 重定向站点:follow redirects with curl in php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多