【问题标题】:Redirect requests inside html page to go through proxy重定向html页面内的请求以通过代理
【发布时间】:2022-08-03 07:16:35
【问题描述】:

我有一个代理,并且我已经获取了我需要的网页内容,例如https://google.com。但是,我还需要能够重定向所有其他资源请求以通过代理。因此,所有图像和脚本都会通过代理返回。此外,所有链接也通过代理返回。如何访问所有请求并执行此操作?这是通过修改网站的 HTML 来实现的吗?现在,我应该能够在本地主机上提供任何动态或静态站点的内容,而不会加载某些元素和脚本。

  • 通常代理是在操作系统的网络配置中设置的。修改 HTML(当然还有 JS,因为站点可能包含 ajax 请求)是一项繁琐的任务,因为链接可能有多种形式,仅通过解析 HTML 或 JS 可能无法检测到。
  • 您能解释一下您使用的是哪种代理吗?通常,当人们说“代理”时,他们的意思是 SOCKS 或网络代理,它强制流量通过它。这似乎不是您的意思,因此请提供有关您的代理的更多详细信息。
  • 你的应用是什么?对于抓取:听起来您正在寻找puppeteer。请参阅示例:examples/proxy.js 以及链接和下游刮板。对于桌面应用程序,像 electron (\"web embeds\") 或 tauri 这样的框架应该能够在应用程序内提供网页服务。
  • @Codebling 我正在使用转发代理。我需要的是更改 url 以返回代理并获取内容的所有请求。我想我现在已经用我的答案解决了这个问题。

标签: node.js proxy


【解决方案1】:

所以我找到了解决方案!

使用服务工作者,我可以重定向请求以通过转发代理返回。此示例代理从旧 api 版本到新版本的请求(但这不是我正在做的事情。它会添加一个特定的 url,如 https://api.allorigins.win/get?url= 到开头):

self.addEventListener('fetch', e => {
  const {url} = e.request;
  if(url.includes('https://api.your.domain/api/v1/') {
    const newUrl = url.replace('/api/v1/', '/api/v2/');
    e.respondWith(fetch(newUrl));
  }
});

这篇文章基本上解决了我的问题:https://betterprogramming.pub/how-to-run-a-proxy-server-inside-your-browser-8b96ea2ef1ea

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2016-06-30
    相关资源
    最近更新 更多