Загрузка файла HTTP с использованием Javascript

Есть ли способ (в Javascript) загрузить удаленный веб-сайт (например, как с помощью Curl), прочитать его в строковую переменную и продолжить его обработку?

5 ответов

Вы можете загрузить файл только из того же домена, что и в соответствии с той же политикой происхождения. Вы можете загрузить контент из того же домена, используя объект 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;
   ...
 }

Существуют способы обойти политику, некоторые из которых перечислены на той же странице Википедии. Но в лучшем случае это взлом, а в худшем - незаконно.

Конечно, URL-адрес должен быть из того же домена, если URL-адрес не имеет междоменной политики или вы не создаете сценарий прокси на стороне сервера.

Следующий код является примером вызова ajax любого домена через прокси-скрипт PHP:


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 к указанному URL-адресу через Curl (или любую другую библиотеку 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;

?>

надеюсь, что все имеет смысл.

Вы можете использовать Yahoo Query Language для запроса любой страницы в Интернете.

Например, если вы хотите получить полный источник домашней страницы Google, вы можете использовать:

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

Вам придется использовать их обратный вызов JSON и повторно выполнить возвращаемый объект, но вы сможете получить полное представление о странице.

Нет. Javascript ограничен доменом, на котором он работает.

В основном вам не разрешат. Javascript не позволит вам сделать это по соображениям безопасности. Однако вы можете запросить данные json из других доменов, используя jQuery. Вот пример из документации 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;
      });
    });

Вы можете найти этот код в JQuery Docs. Как вы можете видеть, это делает запрос, возвращает данные и обновляет некоторые теги изображений в DOM с изображениями кошек...

Другие вопросы по тегам