我需要为那些在严格控制的企业 Windows 环境中无法访问 PowerShell 或安装 wget 类软件的人员提供一个流程,以便他们从 Web 服务器界面下载非常大的 XML 文件,默认情况下,这些界面会尝试在浏览器中显示 50mb 以上的 XML 文件。这会使他们的浏览器崩溃。
如何才能将这些文件作为文件下载,而不是以页面形式显示?
他们有常用的 Windows 软件,如 MS Office 和常用的 Web 浏览器,并且有 Notepad++。文件将通过其他(仅上传)服务进行处理,使其大小更易于管理,然后才能直接用于 Notepad++ 之类的任何程序,这也会对原始文件造成影响。
答案1
我发现了一个技巧,利用 Google Chrome 在尝试保存页面时重新加载页面这一功能。
- 将大量文本的链接作为普通的 Chrome 网址打开
- 等到代码开始出现在屏幕上,然后点击浏览器的“停止”按钮
- 右击。现在可以使用“另存为”功能。这会重新加载未完成的页面,从头开始使用下载功能,而不是尝试在浏览器中显示它
我考虑的另一个最后选择是简单地创建一个 HTML 文件,其中只包含指向该页面的链接,他们可以右键单击并保存。但是,他们可能会受到安全限制,无法从离线 HTML 文件中访问链接。
<html>
<head>
<title>Right-click the link</title>
<style> a { display: block; height: 200px; width: 200px; margin: 30px; padding: 80px 0px; text-align: center; font-size: 2em; background: #eeeeee; } </style>
</head>
<body>
<a href="url-here.com">Right click and save this link</a>
</body>
</html>
答案2
浏览器根据资源的 Content-Type(在承载该资源的 http 响应中标识)来选择如何处理下载的资源(如果响应中没有 Content-Type 字段,浏览器通常还会检查内容以确定其是什么)。
因此,如果您可以更改响应的 Content-Type,则可以让浏览器提示保存任何下载的资源。您可以依赖的 Content-Type 是“application/octet-stream”类型,该类型可使资源保存为文件。
您可以使用代理服务器更改 http 响应的 Content-Type 响应标头。多个代理服务器可以重写标头。我们的产品温盖特提供在将响应发送到客户端之前修改响应标头的功能。它对 10 个并发用户也是免费的,因此在您的情况下可能是免费的。
脚步:
首先,您需要安装代理,并设置客户端以使用它。如果您已经有公司代理,则可能需要配置 WinGate 的 WWW 代理以通过该代理进行连接。
其次,配置重写标题。WinGate 有一个流程图 GUI 策略系统,您可以将元素拖放到该系统上以处理事件。
您要处理的事件是 WWW 代理的 ProxyResponse 事件。在 WinGate Management 中,您可以导航到WinGate > 控制面板 > 策略并点击任务“新策略”。选择Source Type: Any HTTPProxy
并Event Type: ProxyResponse
命名。
单击“确定”将打开策略编辑器。将事件(例如WWW Proxy Server: ProxyResponse
)拖到左上角的工作表上,然后将列表查找检查拖到工作表上,它将弹出一个编辑对话框,单击左上角的有趣的 S 按钮,它将看起来像这样,向下钻取到 Request.URL 并单击“确定”
选择“模式匹配”作为匹配方法,并为您想要更改 Content-Type 的 URL 添加一个具有匹配规范的新值,如果您需要匹配具有不同查询字符串的 URL,则可以使用通配符。
单击“确定”,为其命名,然后将此项连接到事件,方法是从事件的 RHS 拖到该项目上。
然后将表达式求值器项拖到工作表上。输入值Response.Headers.Set("Content-Type","application/octet-stream")
,取消选中“将表达式解析为真/假...”
然后将其连接到 List 检查项的 Yes 输出。单击顶部的 Save 按钮,即可生效。
您的政策将会是这样的。
现在,当有人请求与检查 URL 项中的匹配值匹配的 URL 时,它会将其保存为文件。
免责声明:我为 Qbik 工作,该公司是 WinGate 的作者