#http-proxy #proxy #http

mz-http-proxy

尊重系统代理配置的HTTP代理适配器

1 个不稳定版本

0.1.0 2021年8月4日

#423HTTP客户端

Apache-2.0

28KB
376

mz-http-proxy

crates.io Rust Documentation

尊重系统代理配置的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_proxyhttps_proxyall_proxyno_proxy 控制,它们的含义是非标准的,并且在不同的工具之间差异很大。Materialize实现了已被许多其他HTTP客户端证明是常见的子集行为。

http_proxy 外,环境变量可以是上面写的小写形式,也可以是全大写(例如,HTTPS_PROXY)。http_proxy 只接受小写,因为变量 HTTP_PROXY 可以在CGI环境中被攻击者控制,如 golang/go#16405。如果指定了大小写不同的环境变量,则小写变量具有优先权。

代理选择

环境变量http_proxyhttps_proxy分别指定用于路由HTTP和HTTPS流量的代理服务器的URL。环境变量all_proxy指定适用于HTTP和HTTPS流量的代理服务器。http_proxyhttps_proxy具有比all_proxy更高的优先级。

代理排除

环境变量no_proxy是一个以逗号分隔的列表,指定了要从代理中排除的主机。它优先于其他环境变量。列表中的每个条目必须是:

  • 一个IP地址后跟可选的端口号(例如,1.2.3.41.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.4no_proxy值将排除直接在URL中提及IP地址的请求(例如,http://1.2.3.4)从代理,但不排除对http://domainthatresolvesto1234的请求。

no_proxy中的域名匹配所有子域名,因此no_proxy值为materialize.com将排除对materialize.comcloud.materialize.com的代理请求。为了与其他工具兼容,域名可以包含一个可选的.字符,该字符将被忽略。

列表中的无效条目将被静默忽略。

如果no_proxy环境变量设置为特殊值*,则所有地址都将排除代理。

另请参阅

有关这些环境变量的更多详细信息,请参阅GitLab博客文章"我们需要谈谈:能否标准化NO_PROXY?"

依赖项

~0.6–14MB
~184K SLoC