【问题标题】:Download HTML of any website and echo it in PHP [duplicate]下载任何网站的 HTML 并在 PHP 中回显 [重复]
【发布时间】:2013-11-30 14:49:22
【问题描述】:

编辑了这篇文章,我认为我的问题解释错了:

我希望我的 php 页面从任何页面下载 HTML 代码,实际上我可以期待一个,“http://www.lolnexus.com/”并且我制作了这个代码

$nexus= file_get_contents('http://www.lolnexus.com/');

$myFile = "nexus.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $nexus);
fclose($fh);

结果是:这个

<html><head><title>Object moved</title></head><body>

对象已移至here


如果我将我的网址更改为其他网页,它可以正常工作.....

感谢阅读

【问题讨论】:

  • 请举例说明一个不起作用的网站。
  • 我怀疑您正在获得重定向屏幕,但您没有要求 cURL 跟踪重定向。见this answer
  • 感谢您的回复 :) >lolnexus.com

标签: php html


【解决方案1】:

您必须使用选项CURLOPT_FOLLOWLOCATION

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

这让我们 curl 跟踪从 Web 服务器发出的任何重定向。

【讨论】:

  • 感谢回复,我只想获取该页面的 html 代码,我不知道该行是做什么的,但我不想重定向到该页面,我遇到了一些错误..,警告: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION 在启用安全模式或在第 11 行的 /home/a8466706/public_html/index.php 中设置 open_basedir 时无法激活
【解决方案2】:

不确定这是否会有所帮助,但如果您不需要 POST 任何数据到您请求 HTML 的页面,您也可以使用 file_get_contents 函数。

$html = file_get_contents('www.google.com');

然后该站点的 HTML 将作为文本存储在 $html 变量中。

附录:

我已经测试了以下代码,两种方法都有效:

<?php
## Define url to grab
$url = 'http://www.lolnexus.com';

## Method 1: simple file_get_contents
$html = file_get_contents($url);

## Method 2: using cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$html = curl_exec($ch);

## Write output to file.
$fh = fopen('html_output.txt', 'w') or die("can't open file");
fwrite($fh, $html);
fclose($fh);

## Output something to the page.
echo 'Done!';
?>

请注意,当使用 cURL 方法时,省略 CURLOPT_FOLLOWLOCATION 或将其设置为 FALSE 会导致收到重定向消息。哦,并根据您要测试的方法注释掉方法 1 或方法 2。

【讨论】:

  • 我也试过了,#code#$html = file_get_contents('lolnexus.com/'); echo $html;#code# #output#: "对象移到了这里。"
  • 返回这个## 对象移动

    对象移动到lolnexus.com/?cookieTest=1">here</a>.</h2> ##

  • cURL 可能是您更好的选择,然后使用其他用户描述的选项设置来指示 cURL 遵循任何重定向。不过有趣的是,当我这样做时 $html = file_get_contents('lolnexus.com');我可以毫无问题地将页面源写入文件并询问它。这是您遇到重定向问题的网站之一吗?。
  • 是的,只在这个网站上
  • 奇怪的是我没有遇到同样的问题。然而。问题是页面正在重定向您,并且无论出于何种原因您的脚本没有遵循重定向(cURL 应该可以毫无问题地处理这个问题)。您不能简单地找出页面将您重定向到的位置并使用该 URL 来绕过重定向吗?我不知道您项目的全部范围,但如果您查询的是相同的页面,这不是保证,但可能是一个非常简单的解决方案。
【解决方案3】:

为了让curl_exec 返回输出而不是回显它,添加这个:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

【讨论】:

    猜你喜欢
    • 2020-03-26
    • 1970-01-01
    • 2012-01-02
    • 2015-02-14
    • 2012-03-23
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多