【问题标题】:HTTP file download with Javascript使用 Javascript 下载 HTTP 文件
【发布时间】:2008-12-16 14:34:48
【问题描述】:

有没有办法(在 Javascript 中)下载远程网站(例如使用 Curl),将其读入字符串变量并进一步处理?

【问题讨论】:

    标签: javascript http curl io


    【解决方案1】:

    根据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;
       ...
     }
    

    有一些方法可以规避该政策,其中一些方法列在同一个维基百科页面中。但这充其量是一种黑客行为,最坏的情况是非法的。

    【讨论】:

      【解决方案2】:

      当然- url 必须来自同一个域,除非 url 具有跨域策略或者您创建了服务器端代理脚本。

      以下代码是通过代理 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; ?>

      希望一切都有意义。

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

        • YQL 太酷了。我还不确定我会在哪里使用它,但它仍然是一个令人着迷的工具。
        【解决方案4】:

        大多数情况下你不会被允许。出于安全原因,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 中的一些图像标签...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-20
          • 1970-01-01
          • 2010-09-25
          • 2021-12-18
          • 2015-04-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多