使用Javascript下载HTTP文件

时间:2008-12-16 14:34:48

标签: javascript http curl io

有没有办法(在Javascript中)下载远程网站(例如与Curl一样),将其读入字符串变量并进一步处理它?<​​/ p>

5 个答案:

答案 0 :(得分:6)

根据Same Origin Policy,您只能从同一个域下载文件。您可以使用XMLHTTPRequest对象从同一域下载内容:

 var xhReq = createXMLHttpRequest();
 xhReq.open("GET", "page.html", true);
 xhReq.onreadystatechange = onResponse;
 xhReq.send(null);
 ...
 function onResponse() {
   if (xhReq.readyState != 4)  { return; }
   var serverResponse = xhReq.responseText;
   ...
 }

有许多方法可以规避政策,其中一些列在同一个维基百科页面中。但这是最好的黑客攻击,最坏的情况是非法的。

答案 1 :(得分:1)

确定 - 网址必须来自同一个域,除非网址具有跨网域策略或您创建服务器端代理脚本。

以下代码是通过代理PHP脚本对任何域进行ajax调用的示例:


var xmlhttp =  new XMLHttpRequest();
xmlhttp.open("POST","http://localhost/proxy.php?url=http://google.com", true);
xmlhttp.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      // ensure we have a response...
      if (xmlhttp.responseText) {
         var html =  xmlhttp.responseText;
         // do your processing here...
      }
    }
};
xmlhttp.send();

然后,您将使您的proxy.php脚本通过Curl(或您的服务器端语言具有的任何url库)连接到给定的URL,然后简单地回显您域中的内容...


<?php

// proxy.php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$_GET["url"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;

?>


希望一切都有意义。

答案 2 :(得分:0)

没有。 Javascript仅限于运行它的域。

答案 3 :(得分:0)

您可以使用Yahoo Query Language查询网络上的任何页面。

例如,如果您想要Google主页的完整来源,可以使用:

select * from html where url="http://google.com" and xpath='/html' limit 1

您必须使用他们的JSON回调并重新序列化返回的对象,但您将能够获得该页面的完整视图。

答案 4 :(得分:0)

通常你不会被允许。出于安全原因,Javascript会阻止您执行此操作。但是,您可以使用jQuery从其他域请求json数据。以下是jquery文档中的一个示例,它从flickr获取了一些猫图片......

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
    function(data){
      $.each(data.items, function(i,item){
        $("<img/>").attr("src", item.media.m).appendTo("#images");
        if ( i == 4 ) return false;
      });
    });

您可以在the jQuery Docs中找到此代码。正如您所看到的,这会产生一个请求,获取数据并使用猫图片更新DOM中的一些图像标签......