在浏览器中配置使用 HTTPS 代理服务器

date:Aug 8, 2018
updated:Aug 14, 2018

前置条件

您应当已经获得了一个 HTTPS 代理服务器配置,形式如:

https://proxy.example.com:8848

如果使用代理服务器需要身份验证,则您应该也拥有了一对用户名和密码,例如 usernamepassword

以下描述均以此为例,请在使用时注意替换。

静态配置和动态配置

在浏览器中配置使用 HTTPS 代理服务器有多种方法,以下两段分别介绍了使用命令行参数的静态配置方法和使用浏览器代理调度扩展的动态配置方法。

静态配置方法比较快,可以立刻生效,但会作用于浏览器一次会话中所有的网页浏览,可能需要关闭并重新启动浏览器才能换成别的配置,可能不够灵活。而动态配置方法可以在图形介面中直接切换当前生效的代理服务器,更适合长期使用。

用于 Chromium、Google Chrome 浏览器的静态配置

如果您使用的是 Chromium 浏览器或者 Google Chromium 浏览器,最简单的方法是使用命令行参数 --proxy-server 启动浏览器。

这个命令行参数会作用于整个浏览器进程和子进程,因此在启动它之前,请确认已经把浏览器完全关闭,包括其后台进程。

此外,如果您使用 SwitchyOmega 这类代理调度扩展,它们会干扰命令行参数生效,请将它置于「系统代理」(System Proxy) 档。

请在「使用命令行」和「使用 Windows 快捷方式」中选择您更习惯的操作方式,然后记得阅读「启动之后」一节。

使用命令行

首先,找出你正常启动 Chromium 浏览器或者 Google Chromium 浏览器的命令是什么,例如是这样:

chromium

那么从终端中运行:

chromium --proxy-server=https://proxy.example.com:8848

不确定浏览器的命令行?

请在浏览器运行的时候访问 chrome://version/ 地址,页面中的 Executable Path 一行即为浏览器当前启动时可执行文件。

浏览器的版本页面同时展示了浏览器可执行文件的路径。

浏览器的版本页面展示了一些内部信息,包括浏览器本身可执行文件的路径。

如果可执行文件路径中包含空格,使用时,在终端中要使用西文单引号或者双引号将它括起来。

使用 Windows 快捷方式

首先,从开始菜单或者桌面,找到可用的 Chromium 浏览器 / Google Chrome 浏览器快捷方式。对它做个副本,以下操作只修改副本。

  1. 右击这个快捷方式副本,弹出上下文菜单;

  2. 单击上下文菜单中的「属性」,通常是最后一项;

  3. 进入「快捷方式」标签,通常是第二项;

  4. 找到「目标」项,在其全部内容之后加入一个半角空格,然后加入:

    --proxy-server=https://proxy.example.com:8848
    

    请确保「目标」项原有的内容,和新增的内容之间有一个半角空格。

    如果原有的内容以双引号结尾,请在双引号的后面开始操作。

  5. 单击「确定」按钮,保存快捷方式。

启动之后

启动之后,可以试着打开网页。如果代理服务器需要身份验证,此时浏览器应当弹出提示,要求输入用户名和密码,请输入对应内容。

访问网页时,Chromium 浏览器或者 Google Chrome 浏览器弹出提示,请求代理服务器的用户名和密码。

访问网页时,Chromium 浏览器或者 Google Chrome 浏览器弹出这样的提示,请求代理服务器的用户名和密码。

如果需要确认配置已经生效,请在浏览器中输入地址 chrome://net-internals/#proxy 查看浏览器内部网络配置。如果在「有效代理配置」下看到了对应的代理服务器信息,说明生效。如果看到的内容是「直接连接」或者其他内容,请检查是否有其他因素在干扰。

Chromium 浏览器内部网络配置信息的代理服务器配置页面。

图为 Chromium 浏览器或者 Google Chrome 浏览器在位于 chrome://net-internals/#proxy 的内部网络配置信息的代理服务器配置页面,应当显示为正在使用之前设置的代理服务器。

用于 Chromium,Google Chrome 和 Mozilla Firefox 等浏览器的动态调度配置

安装代理调度扩展

首先,在浏览器中安装对应平台的 SwitchyOmega 扩展,具体来说:

SwitchyOmega 是一个广受赞誉的代理调度扩展。

配置情景模式

安装之后,SwitchyOmega 的配置介面会自动弹出。如果没有,请从工具栏中找到 SwitchyOmega 的圆环形状图标单击之后,在弹出的菜单中单击「选项」。

第一次进入配置介面,可能会有操作介绍向导。跳过向导之后可以开始配置:

  1. 在左侧,单击「新增情景模式」,在对话框中输入你想要使用的情景模式名称,以及选取类型「代理服务器」(Proxy Profile),通常这是四项中的第一项;

  2. 在表格中填入具体的参数,就像这样:

    网址协议 代理协议 代理服务器 代理端口  
    (默认) HTTPS proxy.example.com 8848 (这里有个锁)
  3. 如果你获取的代理服务器配置包含用户名和密码,请点击表格右边的小锁,在里面填入用户名和密码。

  4. 点击左下角的「应用选项」(Apply changes) 按钮保存这些更改。

然后就可以从单击 SwitchyOmega 的圆环形状图标弹出的菜单里面启用这个情景模式了,从菜单中选取和上面第 1 步中输入的一样的情景模式名称即可。

切换情景模式

除了用户录入的情景模式之外,SwitchyOmega 自身提供了两个特殊的模式:

直接连接
即,不使用任何代理服务器。
系统代理
即,关闭 SwitchyOmega 的代理调度功能。此时,别的代理调度扩展可以生效,或者由上一节里命令行参数指明的代理服务器生效。或者也可能采用操作系统级别配置的代理服务器,但这种通常并不支持 HTTPS 代理。

请不要同时启用 SwitchyOmega 和其他代理调度扩展,否则很难说清楚哪个会生效。需要使用其他代理调度扩展时,或者如上段使用命令行参数指明代理服务器时,可以将 SwitchyOmega 置于「系统代理」档,避免干扰。

SwitchyOmega 使用小技巧

SwitchyOmega 自带的两个样例情景模式是可以删除的,也推荐删除。由于 auto switch 这个情景模式引用了 proxy 这个情景模式,因此需要先删除 auto switch 之后再删除 proxy。具体方法是在配置介面点入一个情景模式之后,点右上方红色的删除按钮并确认。

配置介面中,左边第一项「介面」,点入之后第二个条目是「切换情景模式时刷新当前标签」,建议不要选中它,否则会导致略频繁的页面刷新。

配置 Chrome OS

开箱之后

Chrome OS 在连入无线网之后、登入用户账户之前,可以配置使用 HTTPS 代理,具体来说:

  1. 点击登入介面右下角显示了时间的托盘区域;
  2. 从菜单中点击当前使用的无线网的名字;
  3. 点击菜单区域右上角的齿轮,进入无线网的配置对话框;
  4. 点开「代理服务器连接类型」下拉菜单,置于「手动代理配置」;
  5. 选中「对于所有的协议,使用同样的代理服务器」;
  6. 下方出现「代理服务器」和「端口」两空,分别输入 https://proxy.example.com8848
  7. 关闭窗口。

此时可以继续登入用户账户。

登入账户之后

在登入账户之后,可能需要在无线网配置中,使用和前一节一样的方法,将当前使用的无线网配置为使用 HTTPS 代理服务器。

在完成了这一步之后,建议按照「用于 Chromium,Google Chrome 和 Mozilla Firefox 等浏览器的动态调度配置」一段的介绍,从 Chrome 网上应用店中安装代理调度扩展,方便切换不同的模式。

用于 Chromium,Google Chrome 和 Mozilla Firefox 等浏览器的 PAC 调度方式

在无法或者不愿意安装代理调度扩展的情况下,亦可以在 Chromium,Google Chrome 和 Mozilla Firefox 等浏览器中通过 PAC (proxy auto-config,代理服务器自动配置) 方式配置使用 HTTPS 扩展。此方法相比使用命令行参数的优势在于可以支持 Mozilla Firefox 等浏览器。

具体来说,需要创建内容是这样的一个 PAC 文件:

function FindProxyForURL(url, host) {
  if (host === "127.0.0.1" || host === "::1" || host === "localhost")
    return "DIRECT";
  return "HTTPS proxy.example.com:8848";
}

并在浏览器中配置使用这个文件。这个文件可以在本地磁盘(使用 file:/// 引用),亦可以来自网上地址。因使用步骤依然较繁琐,并不推荐使用这个方法。

在 cURL 命令行工具中使用

除了浏览器之外,cURL 也支持使用 HTTPS 代理服务器

curl(1) 命令中使用 HTTPS 代理服务器的方式是使用 --proxy 参数:

curl --proxy 'https://proxy.example.com:8848/' --proxy-user username:password 'https://www.example.com/'