使用cURL检索网站并绕过相同的原始限制,插入javascript

时间:2013-01-19 21:30:51

标签: php javascript curl cross-domain same-origin-policy

我需要在iframe中加载多个网站,同时还在每个页面中添加一个google翻译插件,以便进行翻译。这是插入部分的代码:

<iframe onload="googleJS1(); googleJS2(); googleJS3();" class=iframe2 src=http://localhost:8888/mysitep></iframe>

<script>
    function googleJS1() {
        var iframe = document.getElementsByTagName('iframe')[0];
        var doc = iframe.contentWindow.document;
        var newScript = doc.createElement('div');
        newScript.setAttribute("id", "google_translate_element");
        var bodyClass = doc.getElementsByTagName('body')[0];
        bodyClass.insertBefore(newScript, bodyClass.childNodes[0]);
    }

    function googleJS2() {
        var iframe = document.getElementsByTagName('iframe')[0];
        var doc = iframe.contentWindow.document;
        var newScript = doc.createElement('script');
        newScript.setAttribute("src", "http://translate.google.com/translate_a/element.js?    cb=googleTranslateElementInit");
        var bodyClass = doc.getElementsByTagName('head')[0];
        bodyClass.insertBefore(newScript, bodyClass.childNodes[1]);
    }

    function googleJS3() {
        var iframe = document.getElementsByTagName('iframe')[0];
        var doc = iframe.contentWindow.document;
        var newScript = doc.createElement('script');
        newScript.setAttribute("src", "http://localhost:8888/mysite/google.js");
        var bodyClass = doc.getElementsByTagName('head')[0];
        bodyClass.insertBefore(newScript, bodyClass.childNodes[2]);
    }
}
</script>

只要iframe目标URL位于同一服务器上,此方法就可以正常工作。我读取绕过相同的原始约束我应该设置代理服务器并通过代理传递所有URL请求。所以我读了cURL并尝试了这个测试:

<?php

function get_data($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_USERAGENT, $userAgent);
        curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$test = get_data("http://www.selfridges.com");
echo $test;

?>

加载了基本的HTML元素,但没有加载CSS和图像。此外,链接仍指向原始URL。我需要一些建议,我还可以将目标URL中的CSS,图像和js拉到代理中并从那里加载页面,使它看起来像来自相同的域和端口,并传递相同的源策略。我还需要链接以这种方式工作。

例如:

main page - http://localhost:8888/proxy.php 

links     - http://localhost:8888/proxy.php/products/2012/shoes

也欢迎任何其他方法或替代方案。

由于

1 个答案:

答案 0 :(得分:0)

假设所有链接&amp;目标文档中的图像是相对的,您可以在头部注入base标记。这将有效地使链接绝对,所以链接&amp;图像仍然会引用目标域(不是你的)。

http://reference.sitepoint.com/html/base

不知道如何使用css图像。

对于任何目标站点一致地工作的解决方案将艰难 - 您不仅需要解析html中的链接,还需要解析任何css引用中的链接。有些网站可能会使用AJAX来填充页面,这也会在目标网站上造成相同的原始政策问题。