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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет. Javascript ограничен доменом, в котором он запущен.
Вы можете загрузить файл только с того же домена, в соответствии с Та же политика происхождения. Однако вы можете загружать контент из того же домена, используя объект 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 не позволит вам сделать это по соображениям безопасности. Однако вы можете запрашивать данные 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 изображениями кошек ...
YQL - это круто. Я пока не уверен, где бы я его использовал, но это все еще интересный инструмент.