在我的申请中,我正在从供应商处加载产品信息:
$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正在我的本地计算机上运行,因此就我所知,它与我通过浏览器查看网站时看起来没有什么不同。
答案 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。