9

我正在开发浏览器扩展。该扩展程序适用于我们无法控制的外部网站。

我希望能够测试扩展。我面临的主要问题之一是在本地“按原样”显示网站。

是否可以在本地“按原样”显示网站?

我希望能够在本地完全 按原样为网站提供服务以进行测试。这意味着我想模拟完全相同的 HTTP 数据,包括 iframe 广告等。

  • 是否有捷径可寻?

更多信息:

我希望我的系统尽可能接近远程网站。例如,我想运行命令fetch,这将允许我在浏览器中访问该站点(没有打开互联网)并获得与其他情况完全相同的内容(包括不是来自单个域的信息、谷歌广告、 ETC)。

如果这有帮助,我不介意使用虚拟机。

我认为这在测试中非常有用。特别是当我有一个错误时,我需要在具有许多随机因素(广告展示等)的网站中可靠地重现。

4

4 回答 4

4

正如已经提到的,缓存代理应该为您解决问题(顺便说一句,这是最简单的解决方案)。有很多不同的实现,所以你只需要花一些时间选择一个合适的(根据我的经验 squid 是一个很好的解决方案)。无论如何,我想强调另外两个有趣的选项:

选项 1:Betamax

Betamax 是一个用于在测试中模拟外部 HTTP 资源(例如 Web 服务和 REST API)的工具。该项目的灵感来自 Ruby 的 VCR 库。Betamax 旨在通过拦截应用程序发起的 HTTP 连接并重放先前记录的响应来解决这些问题。

Betamax 有两种口味。第一个是 HTTP 和 HTTPS 代理,它可以拦截以尊重 Java 的 http.proxyHost 和 http.proxyPort 系统属性的任何方式产生的流量。第二个是 Apache HttpClient 的简单包装器。

顺便说一句,Betamax 为您提供了一个非常有趣的功能:

Betamax 是一种测试工具,而不是符合规范的 HTTP 代理。它忽略通常用于防止代理缓存或存储 HTTP 流量的任何和所有标头。

选项 2:Wireshark和重放代理

使用Wireshark 获取您感兴趣的所有流量并重播。我想说实现所需的重播工具并不难,但是您可以使用称为replayproxy 的可用解决方案

Replayproxy 解析来自 .pcap 文件的 HTTP 流,在端口 3128 上打开一个 TCP 套接字,并作为 HTTP 代理侦听,使用提取的 HTTP 响应作为缓存,同时拒绝所有对未知 URL 的请求。

这种方法为您提供完全控制和逐位精确模拟。

于 2013-05-18T11:44:36.973 回答
1

我不知道是否有简单的方法,但有一种方法。

您可以设置本地网络服务器,例如 IIS、Apache 或minihttpd

然后您可以使用wget获取网站内容。(它有一个镜像选项)。许多浏览器都有“保存整个网页”选项,可以抓取所有内容,例如图像。

广告很可能来自远程站点,因此您可能必须手动编辑 HTML 中的这些行以不引用实际的广告服务器,或者自己设置模拟广告(如横幅图像)。

然后你可以导航你的浏览器http://localhost来访问你的本地网站,假设端口 80 是默认的。

希望这可以帮助!

于 2013-05-05T06:30:12.890 回答
1

我假设您想为不受您控制的远程站点提供服务。在这种情况下,您可以使用代理服务器并让该服务器积极缓存每个响应。然而,这有它的局限性。首先,您必须通过此代理访问您打算使用的每个站点(例如使用浏览器),其次您将无法模拟表单处理。

或者,您可以使用蜘蛛下载某个网站的所有内容。根据蜘蛛软件的不同,它甚至可以下载 JavaScript 构建的链接。然后,您可以使用网络服务器来提供该内容。

于 2013-05-15T07:19:51.747 回答
0

该服务http://www.json-gen.com通过 rest 为 html、json 和 xml 提供模拟。通过这种方式,您可以将前端与后端分开测试。

于 2016-12-08T19:45:33.787 回答