从不同的域PHP加载网站

时间:2014-07-16 19:08:05

标签: php

在我的申请中,我正在从供应商处加载产品信息:

$start_url = "http://www.example.com/product/product_code";

这些网址通常由供应商的网站重定向,我编写了一个成功查找目标网址的功能,如下所示:

$end_url = destination( $start_url );
echo "<a href=\"$start_url\">start url</a>"; // link get redirected to correct page
echo "<a href=\"$end_url\">end url</a>"; // links straight to correct page, no redirection

但是,如果我想从页面获取HTML ...

echo file_get_contents( $start_url );  // 404
echo file_get_contents( $end_url );  // 404

...我刚收到供应商的404页面(不是通用的,而是定制的)。

我启用了allow_url_fopen; file_get_contents( "http://www.example.com/" )工作正常。

我可以使用任一URL在iframe客户端加载预期内容,但XSS安全性阻止我提取我需要的数据。

我唯一能想到的是,如果该网站使用的是URL重写器,那么这会搞砸吗?

PHP正在我的本地计算机上运行,​​因此就我所知,它与我通过浏览器查看网站时看起来没有什么不同。

1 个答案:

答案 0 :(得分:0)

感谢@Loz Cheroneツ的评论,使用cURL和changing the user agent工作。

$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";

$url = $_REQUEST["url"];  // e.g. www.example.com/product/ABC123            

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  // follows any redirection
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

echo curl_exec($ch);

curl_close($ch);

然后我将响应放入srcdoc客户端的iframe属性中,以便我可以访问DOM。