Загрузка файла HTTP с использованием Javascript - PullRequest
6 голосов
/ 16 декабря 2008

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

Ответы [ 5 ]

6 голосов
/ 16 декабря 2008

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

Конечно. 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;

?>


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

0 голосов
/ 16 декабря 2008

В основном вам не разрешат. 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 . Как вы видите, это делает запрос, возвращает данные и обновляет некоторые теги изображений в DOM с изображениями кошек ...

0 голосов
/ 16 декабря 2008

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

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

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

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

0 голосов
/ 16 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...