【问题标题】:Node.js: How do Proxy sites deal with relative Urls?Node.js:代理站点如何处理相对 URL?
【发布时间】:2011-11-23 09:40:50
【问题描述】:

我在 Node 中创建了一个相对简单的代理,它允许我下载页面并显示它们。这很好,尽管一些 scriptslinksformsimages 似乎已损坏,因为它们指向相关文件。作为一个项目,我正在尝试创建一个功能齐全的网络代理。

Proxify 这样的网站是如何解决这个问题的?

参考方案:

var app = require('express').createServer();
var request = require('request'),
sys = require('sys'),
fs=require('fs');

app.get('/url', function(req, res){
  console.log(req.query.link);

  request({ uri: req.query.link,
            headers: {"User-Agent": "Mozilla/5.0 (Windows  NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0"}
          }, function (error, response, body) {

             if (error && response.statusCode !== 200) {    
               console.log('Error when contacting google.com')
             }

  res.send(body, {"Content-type": "text/html"});
  res.end(); 

  });
});

【问题讨论】:

    标签: node.js proxy screen-scraping relative-path


    【解决方案1】:

    现在您的代码只是代理 html 文件,客户端直接从真实站点获取其余部分。您需要使用 node jQuery 之类的东西来替换文档中的所有 src/href 以使它们通过您的代理,同时您可以检查它们是否是相对的,以及它们是否在当前 url 前面然后创建您的代理网址。

    【讨论】:

    • 谢谢,但是表格呢?这是真正的问题之一,我不确定如何显示表单数据的结果,尤其是当它是处理动作的脚本时。
    • 您需要使用 app.all 而不是 app.get,然后通过使用的方法。因此,如果您使用的是 bodyParser 中间件,您的请求选项将是 {uri: req.query.link, method: req.method, body: req.body, headers: '...'}
    • 那么当在抓取的网站上处理链接或表单时,我如何能够捕捉到正在传递的内容?顺便谢谢。
    • 只需使用该选项块就可以将所有内容都传递出去,您将从 POST 中获取正文,如您所料。查看此粘贴以了解其外观。 pastebin.com/ah4nEsTi
    • 谢谢,我可以使用一些表单,但是在 javascript 上运行的表单会是个问题。我决定使用 REGEX 来检测脚本指向的相对 URL 将是最好的做法。
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2015-03-02
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2015-01-30
    • 2012-05-13
    • 1970-01-01
    相关资源
    最近更新 更多