1 个不稳定版本
0.1.0 | 2021年8月4日 |
---|
#423 在 HTTP客户端
28KB
376 行
mz-http-proxy
尊重系统代理配置的HTTP代理适配器。
安装
# Cargo.toml
[dependencies]
mz-http-proxy = { version = "0.1", features = ["hyper", "reqwest"] }
lib.rs
:
HTTP代理适配器。
此crate构建了尊重系统代理配置的HTTP客户端。
维护权
此crate是作为Materialize(流式数据仓库)的一部分开发的。鼓励贡献
特性
默认情况下,所有特性均被禁用。您可能需要启用以下特性之一,具体取决于您使用的HTTP客户端库
-
hyper
特性使代理适配器可用于与hyper
crate 一起使用。 -
reqwest
特性使代理适配器可用于与reqwest
crate 一起使用。
请注意,reqwest
默认会自行确定系统代理配置,但其对 no_proxy
的支持不如本crate的实现完整。
系统代理配置
系统的代理配置受四个环境变量 http_proxy
、https_proxy
、all_proxy
和 no_proxy
控制,它们的含义是非标准的,并且在不同的工具之间差异很大。Materialize实现了已被许多其他HTTP客户端证明是常见的子集行为。
除 http_proxy
外,环境变量可以是上面写的小写形式,也可以是全大写(例如,HTTPS_PROXY
)。http_proxy
只接受小写,因为变量 HTTP_PROXY
可以在CGI环境中被攻击者控制,如 golang/go#16405。如果指定了大小写不同的环境变量,则小写变量具有优先权。
代理选择
环境变量http_proxy
和https_proxy
分别指定用于路由HTTP和HTTPS流量的代理服务器的URL。环境变量all_proxy
指定适用于HTTP和HTTPS流量的代理服务器。http_proxy
和https_proxy
具有比all_proxy
更高的优先级。
代理排除
环境变量no_proxy
是一个以逗号分隔的列表,指定了要从代理中排除的主机。它优先于其他环境变量。列表中的每个条目必须是:
- 一个IP地址后跟可选的端口号(例如,
1.2.3.4
,1.2.3.4:80
,::1
,[::1]
,或[::1]:80
), - 一个CIDR表示法中的IP地址前缀(例如,
1.1.0.0/16
),或 - 一个域名后跟可选的端口号(例如,
foo.com
)。
条目周围的空白将被忽略。
IPv6地址不能包含[
和]
字符内的空白,否则将被视为域名。跟有端口号指定的IPv6地址必须被[
和]
包围,否则端口号将被视为IPv6地址的一部分。(从技术上讲,实现允许IPv4地址也被括号包围,以与其他工具兼容,但这不应被依赖。)
no_proxy
匹配从不涉及DNS解析,因此1.2.3.4
的no_proxy
值将排除直接在URL中提及IP地址的请求(例如,http://1.2.3.4
)从代理,但不排除对http://domainthatresolvesto1234
的请求。
no_proxy
中的域名匹配所有子域名,因此no_proxy
值为materialize.com
将排除对materialize.com
和cloud.materialize.com
的代理请求。为了与其他工具兼容,域名可以包含一个可选的.
字符,该字符将被忽略。
列表中的无效条目将被静默忽略。
如果no_proxy
环境变量设置为特殊值*
,则所有地址都将排除代理。
另请参阅
有关这些环境变量的更多详细信息,请参阅GitLab博客文章"我们需要谈谈:能否标准化NO_PROXY?"。
依赖项
~0.6–14MB
~184K SLoC