NodeJS相当于PHP代码,涉及_GET美元和file_get_contents


nodejs equivalent of php code involving $_GET and file_get_contents

你能告诉我节点是什么.js相当于这段代码吗:

<?php
    $url = $_GET['url'];
    $html = file_get_contents($url);
    echo $html;
?>

我希望能够这样做的原因是,我想在 iframe 中打开一个外部域页面,并能够在 iframe 内操作 DOM,而不会遇到相同的域策略

谢谢!

@BrandomWamboldt是正确的,你根本无法访问其他域的DOM。

作为解决方法,您可以让自己的服务器下载该页面并操作 DOM。这样,您就可以通过网域上的网址投放网页。

这并不是说这是一个好主意,因为您允许其他站点注入您传递给用户的脚本。但这里有一个使用 jsdom 更改另一个站点页面并从您自己的域发送响应的示例:

var jsdom = require('jsdom');
function handler(req, res){
  jsdom.env(
    "http://stackoverflow.com/questions/19254525/php-echo-equivalent-in-node",
    ["http://code.jquery.com/jquery.js"],
    function (errors, window) {
      window.$('body').prepend(
        window.$('<h1></h1>').text('Text inserted by Node')
      );
      var doc = window.document;
      var output = doc.doctype.toString()+doc.innerHTML;
      res.setHeader('Content-Type', 'text/html');
      res.writeHead(200);
      res.end(output);
    }
  );
};
require('http').createServer(handler).listen(3000);

如果您不关心服务器端的 DOM,您可以简单地下载带有http.requestrequest库的整个远程页面,然后将页面内容作为来自您的域的响应发送。

同样,从安全的角度来看,这很糟糕,因此您可能应该寻找替代解决方案

部分等价物是

function h(req, res){
  var query = require('url').parse(req.url,true).query;
  var data = require('url').parse(query.url);
  require('http').request({
    host: url.host,
    path: url.pathname
 }, function(response){
   response.on('data', function (chunk) {res.write(chunk);});
   response.on('end', function () { res.end(); });
 })
}
require('http').createServer(h).listen(80);

res.write 此处将数据发送到浏览器当然,您可以将所有内容存储在某个变量中并将其放入您自己的模板中

更新:使用获取参数url添加