4

我们如何从 php 和/或 javascript 的网页中获取网页的源代码?

4

4 回答 4

8

在 Javascript 中不使用不必要的框架(在示例中 api.codetabs.com 是绕过跨域资源共享的代理):

fetch('https://api.codetabs.com/v1/proxy?quest=google.com').then((response) => response.text()).then((text) => console.log(text));
于 2019-10-09T02:40:20.690 回答
3

谢谢:

首先,您必须知道,您将永远无法在 javascript 中获取与您的页面不在同一个域中的页面的源代码。(参见http://en.wikipedia.org/wiki/Same_origin_policy)。

在 PHP 中,您可以这样做:

file_get_contents($theUrl);

在javascript中,有三种方式:

首先,通过 XMLHttpRequest :http: //jsfiddle.net/635YY/1/

var url="../635YY",xmlhttp;//Remember, same domain
if("XMLHttpRequest" in window)xmlhttp=new XMLHttpRequest();
if("ActiveXObject" in window)xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
xmlhttp.open('GET',url,true);
xmlhttp.onreadystatechange=function()
{
    if(xmlhttp.readyState==4)alert(xmlhttp.responseText);
};
xmlhttp.send(null);

其次,通过 iFrames:http: //jsfiddle.net/XYjuX/1/

var url="../XYjuX";//Remember, same domain
var iframe=document.createElement("iframe");
iframe.onload=function()
{
    alert(iframe.contentWindow.document.body.innerHTML);
}
iframe.src=url;
iframe.style.display="none";
document.body.appendChild(iframe);

第三,通过 jQuery:http: //jsfiddle.net/edggD/2/

$.get('../edggD',function(data)//Remember, same domain
{
    alert(data);
});
于 2012-06-07T14:02:40.543 回答
1

使用 jQuery 的 Ajax 示例:

// Display the source code of a web page in a pre tag (escaping the HTML).
// Only works if the page is on the same domain.

$.get('page.html', function(data) {
    $('pre').text(data);
});

如果你只是想访问源代码,上面代码中的 data 参数包含原始 HTML 源代码。

于 2012-06-07T13:31:23.437 回答
1

按照谷歌关于 fetch() 的指南并使用 D.Snap 答案,你会得到这样的东西:

fetch('https://api.codetabs.com/v1/proxy?quest=URL_you_want_to_fetch')
  .then(
    function(response) {
      if (response.status !== 200) {
        console.log('Looks like there was a problem. Status Code: ' +
          response.status);
        return;
      }

      // Examine the text in the response
      response.text().then(function(data) {
        // data contains all the plain html of the url you previously set, 
        // you can use it as you want, it is typeof string
        console.log(data)
      });
    }
  )
  .catch(function(err) {
    console.log('Fetch Error :-S', err);
  });

这样您就可以使用 CORS 代理,在本例中是Codetabs CORS 代理

CORS 代理允许您获取不在同一域中的资源,从而避免同源策略阻止您的请求。您可以查看其他 CORS 代理:

https://nordicapis.com/10-free-to-use-cors-proxies/

于 2021-01-03T01:41:23.313 回答