配置 HTTP 代理 (HTTP proxy)

‌HTTP Proxy (HTTP 代理) 是一种代理服务器,用于在 HTTP 协议级别上转发网络请求和响应。‌HTTP Proxy 充当客户端和目标服务器之间的中介,接收来自客户端的 HTTP 请求,并将其转发给目标服务器,然后将目标服务器的响应返回给客户端。

1. Proxies

https://www.gnu.org/software/wget/manual/html_node/Proxies.html

proxy UK [ˈprɒk.si] US [ˈprɑːk.si]:n. 代理人,代表,代理权,代表权

Proxies are special-purpose HTTP servers designed to transfer data from remote servers to local clients.

Wget supports proxies for both HTTP and FTP retrievals. The standard way to specify proxy location, which Wget recognizes, is using the following environment variables:

  • http_proxy
  • https_proxy

If set, the http_proxy and https_proxy variables should contain the URLs of the proxies for HTTP and HTTPS connections respectively.

  • ftp_proxy

This variable should contain the URL of the proxy for FTP connections. It is quite common that http_proxy and ftp_proxy are set to the same URL.

  • no_proxy

This variable should contain a comma-separated list of domain extensions proxy should not be used for. For instance, if the value of no_proxy is .mit.edu, proxy will not be used to retrieve documents from MIT.

Some proxy servers require authorization to enable you to use them. The authorization consists of username and password, which must be sent by Wget.

You may specify your username and password either through the proxy URL or through the command-line options. Assuming that the company’s proxy is located at proxy.company.com at port 8001, a proxy URL location containing authorization data might look like this:

http://hniksic:mypassword@proxy.company.com:8001/

2. curl

https://curl.se/docs/manpage.html

curl is a tool for transferring data from or to a server using URLs. It supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS.

2.1. Environment

The environment variables can be specified in lower case or upper case. The lower case version has precedence. http_proxy is an exception as it is only available in lower case.
环境变量可以以小写或大写形式指定,小写版本优先。"http_proxy" 是个例外,因为它仅以小写形式提供。

precedence UK [ˈpres.ɪ.dəns] US [ˈpres.ə.dens]:n. 优先,优先权

2.2. Proxy protocol prefixes

The proxy string may be specified with a protocol:// prefix to specify alternative proxy protocols.

If no protocol is specified in the proxy string or if the string does not match a supported one, the proxy is treated as an HTTP proxy.

  • http://

Makes it use it as an HTTP proxy. The default if no scheme prefix is used.

  • https://

Makes it treated as an HTTPS proxy.

3. 使用 HTTP 代理 (HTTP proxy)

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-proxy.html

3.1. Using the examples (使用示例)

The following examples show the environment variable name in all uppercase letters. However, if you specify a variable twice using different cases, the lowercase letters take precedence. We recommend that you define each variable only once to avoid system confusion and unexpected behavior.
以下示例显示了全部使用大写字母的环境变量名称。但是,如果使用不同的大小写指定一个变量两次,则优先使用小写字母。建议您只定义每个变量一次,以避免系统混淆和意外行为。

3.1.1. Linux or macOS

$ export HTTP_PROXY=http://10.15.20.25:1234
$ export HTTP_PROXY=http://proxy.example.com:1234

$ export HTTPS_PROXY=http://10.15.20.25:5678
$ export HTTPS_PROXY=http://proxy.example.com:5678

$ export NO_PROXY=169.254.169.254

NO_PROXY 环境变量设置为无需代理的主机或域名。

3.1.2. Windows Command Prompt

  • To set for current session only (仅为当前会话设置)

Using set to set an environment variable changes the value used until the end of the current command prompt session, or until you set the variable to a different value.
使用 set 设置环境变量会更改使用的值,直到当前命令提示符会话结束,或者直到您将该变量设置为其他值。

C:\> set HTTP_PROXY=http://10.15.20.25:1234
C:\> set HTTP_PROXY=http://proxy.example.com:1234

C:\> set HTTPS_PROXY=http://10.15.20.25:5678
C:\> set HTTPS_PROXY=http://proxy.example.com:5678 

C:\> set NO_PROXY=169.254.169.254
  • To set for all sessions (为所有会话设置)
C:\> setx HTTP_PROXY http://10.15.20.25:1234
C:\> setx HTTP_PROXY http://proxy.example.com:1234

C:\> setx HTTPS_PROXY http://10.15.20.25:5678
C:\> setx HTTPS_PROXY http://proxy.example.com:5678 

C:\> setx NO_PROXY 169.254.169.254

Using setx to set an environment variable changes the value used in both the current command prompt session and all command prompt sessions that you create after running the command. It does not affect other command shells that are already running at the time you run the command.
使用 setx 设置环境变量会更改当前命令提示符会话和运行该命令后创建的所有命令提示符会话中使用的值。它不影响在运行该命令时已经运行的其他命令 shell。

3.2. Authenticating to a proxy (向代理进行身份验证)

The AWS CLI supports HTTP Basic authentication. Specify the username and password in the proxy URL, as follows.

3.2.1. Linux or macOS

$ export HTTP_PROXY=http://username:password@proxy.example.com:1234
$ export HTTPS_PROXY=http://username:password@proxy.example.com:5678

3.2.2. Windows Command Prompt

  • To set for current session only (仅为当前会话设置)

Using set to set an environment variable changes the value used until the end of the current command prompt session, or until you set the variable to a different value.
使用 set 设置环境变量会更改使用的值,直到当前命令提示符会话结束,或者直到您将该变量设置为其他值。

C:\> set HTTP_PROXY=http://username:password@proxy.example.com:1234
C:\> set HTTPS_PROXY=http://username:password@proxy.example.com:5678
  • To set for all sessions (为所有会话设置)
C:\> setx HTTP_PROXY http://username:password@proxy.example.com:1234
C:\> setx HTTPS_PROXY http://username:password@proxy.example.com:5678

Using setx to set an environment variable changes the value used in both the current command prompt session and all command prompt sessions that you create after running the command. It does not affect other command shells that are already running at the time you run the command.
使用 setx 设置环境变量会更改当前命令提示符会话和运行该命令后创建的所有命令提示符会话中使用的值。它不影响在运行该命令时已经运行的其他命令 shell。

4. 配置 HTTP 代理 (HTTP proxy)

You can configure the HTTP_PROXY and HTTPS_PROXY environment variables with either the DNS domain names or IP addresses and port numbers that your proxy servers use.
使用 HTTP 代理需要配置环境变量 http_proxyhttps_proxy

4.1. Linux 系统配置 http_proxyhttps_proxy 环境变量

ProxyServer 为代理服务器的域名或者 IPport 为端口号。如果你的代理服务器需要用户名和密码才能访问,需要填写上面的 usernamepassword 部分,否则的话,可以省略这两部分。

  • 为当前用户临时配置环境变量
export http_proxy="http://username:password@ProxyServer:port"
export https_proxy="https://username:password@ProxyServer:port"

export http_proxy="http://ProxyServer:port"
export https_proxy="https://ProxyServer:port"
# With Authentication
export HTTP_PROXY=[username]:[password]@[proxy-web-or-IP-address]:[port-number]
export HTTPS_PROXY=[username]:[password]@[proxy-web-or-IP-address]:[port-number]
export FTP_PROXY=[username]:[password]@ [proxy-web-or-IP-address]:[port-number]
export NO_PROXY=localhost,127.0.0.1

# Without Authentication
export HTTP_PROXY=[proxy-web-or-IP-address]:[port-number]
export HTTPS_PROXY=[proxy-web-or-IP-address]:[port-number]
export FTP_PROXY=[proxy-web-or-IP-address]:[port-number]
export NO_PROXY=localhost,127.0.0.1

通过 export 指令临时设置代理:

(base) yongqiang@yongqiang:~$ export http_proxy="http://192.105.9.13:7890"
(base) yongqiang@yongqiang:~$ export https_proxy="https://192.105.9.13:7890"

查看代理:

(base) yongqiang@yongqiang:~$ env | grep -i proxy
https_proxy=https://192.105.9.13:7890
http_proxy=http://192.105.9.13:7890
(base) yongqiang@yongqiang:~$

临时取消代理:

(base) yongqiang@yongqiang:~$ unset http_proxy
(base) yongqiang@yongqiang:~$ unset https_proxy

查看代理:

(base) yongqiang@yongqiang:~$ env | grep -i proxy
(base) yongqiang@yongqiang:~$

测试方法:

wget www.google.com
curl www.google.com

wget --proxy http://192.105.9.13:7890 www.google.com
curl --proxy http://192.105.9.13:7890 www.google.com
(base) yongqiang@yongqiang:~$ wget www.google.com
--2024-06-01 23:30:18--  http://www.google.com/
Connecting to 192.105.9.13:7890... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1717255848963743&usg=AOvVaw3YRiYLmVQtcHhr0aEN_TJG [following]
--2024-06-01 23:30:19--  http://www.google.com.hk/url?sa=p&hl=zh-CN&pref=hkredirect&pval=yes&q=http://www.google.com.hk/&ust=1717255848963743&usg=AOvVaw3YRiYLmVQtcHhr0aEN_TJG
Reusing existing connection to 192.105.9.13:7890.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.com.hk/ [following]
--2024-06-01 23:30:19--  http://www.google.com.hk/
Reusing existing connection to 192.105.9.13:7890.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html.1’

index.html.1                           [ <=>                                                          ]  19.33K  --.-KB/s    in 0.01s

2024-06-01 23:30:20 (1.98 MB/s) - ‘index.html.1’ saved [19794]

(base) yongqiang@yongqiang:~$
(base) yongqiang@yongqiang:~$ curl www.google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=http://www.google.com.hk/&amp;ust=1717294991706701&amp;usg=AOvVaw2Ej1rgvrxOVAsV8uF9jM2M">here</A>.
</BODY></HTML>
(base) yongqiang@yongqiang:~$
  • 为当前用户永久配置环境变量

~/.bashrc 文件中添加如下内容,可将 http_proxyhttps_proxy 永久配置在当前用户的环境变量中。

export http_proxy="http://username:password@ProxyServer:port"
export https_proxy="https://username:password@ProxyServer:port"

export http_proxy="http://ProxyServer:port"
export https_proxy="https://ProxyServer:port"
# With Authentication
export HTTP_PROXY=[username]:[password]@[proxy-web-or-IP-address]:[port-number]
export HTTPS_PROXY=[username]:[password]@[proxy-web-or-IP-address]:[port-number]
export FTP_PROXY=[username]:[password]@ [proxy-web-or-IP-address]:[port-number]
export NO_PROXY=localhost,127.0.0.1"

# Without Authentication
export HTTP_PROXY=[proxy-web-or-IP-address]:[port-number]
export HTTPS_PROXY=[proxy-web-or-IP-address]:[port-number]
export FTP_PROXY=[proxy-web-or-IP-address]:[port-number]
export NO_PROXY=localhost,127.0.0.1

永久环境变量配置完毕后,注销并重新登录,配置生效。

To force apply your new proxy settings in the current Terminal session, execute the source command:

source ~/.bashrc
  • 为所有用户永久配置环境变量

/etc/environment/etc/profile 文件中添加如下内容,可将 http_proxyhttps_proxy 永久配置在所有用户的环境变量中。

export http_proxy="http://username:password@ProxyServer:port"
export https_proxy="https://username:password@ProxyServer:port"

export http_proxy="http://ProxyServer:port"
export https_proxy="https://ProxyServer:port"
# With Authentication
export HTTP_PROXY=[username]:[password]@[proxy-web-or-IP-address]:[port-number]
export HTTPS_PROXY=[username]:[password]@[proxy-web-or-IP-address]:[port-number]
export FTP_PROXY=[username]:[password]@ [proxy-web-or-IP-address]:[port-number]
export NO_PROXY=localhost,127.0.0.1"

# Without Authentication
export HTTP_PROXY=[proxy-web-or-IP-address]:[port-number]
export HTTPS_PROXY=[proxy-web-or-IP-address]:[port-number]
export FTP_PROXY=[proxy-web-or-IP-address]:[port-number]
export NO_PROXY=localhost,127.0.0.1

永久环境变量配置完毕后,注销并重新登录,配置生效。

To force apply your new proxy settings in the current Terminal session, execute the source command:

source /etc/profile

4.2. Windows 系统配置 http_proxyhttps_proxy 环境变量

4.2.1. cmd

ProxyServer 为代理服务器的域名或者 IPport 为端口号。如果你的代理服务器需要用户名和密码才能访问,需要填写上面的 usernamepassword 部分,否则的话,可以省略这两部分。

  • 临时环境变量
set http_proxy=http://username:password@ProxyServer:port
set https_proxy=https://username:password@ProxyServer:port

set http_proxy=http://ProxyServer:port
set https_proxy=https://ProxyServer:port
  • 永久环境变量

http_proxyhttps_proxy 永久配置在当前用户的环境变量中。

setx "http_proxy" "http://username:password@ProxyServer:port"
setx "https_proxy" "https://username:password@ProxyServer:port"

setx "http_proxy" "http://ProxyServer:port"
setx "https_proxy" "https://ProxyServer:port"

永久环境变量配置完毕后,将在新打开的终端中生效,当前终端不会立即生效。

4.2.2. PowerShell

ProxyServer 为代理服务器的域名或者 IPport 为端口号。如果你的代理服务器需要用户名和密码才能访问,需要填写上面的 usernamepassword 部分,否则的话,可以省略这两部分。

  • 临时环境变量
$env:http_proxy="http://username:password@ProxyServer:port"
$env:https_proxy="https://username:password@ProxyServer:port"

$env:http_proxy="http://ProxyServer:port"
$env:https_proxy="https://ProxyServer:port"
  • 永久环境变量

http_proxyhttps_proxy 永久配置在当前用户的环境变量中。

[environment]::SetEnvironmentvariable("http_proxy", "http://username:password@ProxyServer:port", "User")
[environment]::SetEnvironmentvariable("https_proxy", "https://username:password@ProxyServer:port", "User")

[environment]::SetEnvironmentvariable("http_proxy", "http://ProxyServer:port", "User")
[environment]::SetEnvironmentvariable("https_proxy", "https://ProxyServer:port", "User")

永久环境变量配置完毕后,将在新打开的终端中生效,当前终端不会立即生效。

5. 为 WSL2 (Windows Subsystem for Linux 2) 配置 HTTP 代理

5.1. wsl --list --verbose

C:\Users\cheng>wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

C:\Users\cheng>

5.2. 在 Windows 系统上配置 Cl* for Windows

  • ipconfig

“无线局域网适配器 WLAN 2” 和 “以太网适配器 vEthernet (WSL (Hyper-V firewall))” 两个不同的 IP 地址,为 WSL2 设置代理建议使用 “以太网适配器 vEthernet (WSL (Hyper-V firewall))” 的 172.31.32.1 IP 地址。

Microsoft Windows [版本 10.0.22631.3593]
(c) Microsoft Corporation。保留所有权利。

C:\Users\cheng>ipconfig

Windows IP 配置


以太网适配器 以太网 2:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 8:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 本地连接* 9:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :

无线局域网适配器 WLAN 2:

...

以太网适配器 vEthernet (WSL (Hyper-V firewall)):

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::ed84:13c8:f7e2:6918%45
   IPv4 地址 . . . . . . . . . . . . : 172.31.32.1
   子网掩码  . . . . . . . . . . . . : 255.255.240.0
   默认网关. . . . . . . . . . . . . :

C:\Users\cheng>

Cl* for Windows Download - Cl*.for.Windows-0.20.39-win.7z
E:\software\Cl*.for.Windows-0.20.39-win\Cl* for Windows.exe

  • General

允许局域网代理 Allow LAN

在这里插入图片描述

Gh* 控制面板里点击左侧导航栏手机代理,找到 Cl* for Windows 订阅地址并点击复制。

在这里插入图片描述

  • Profiles

在 Profiles 页面顶部,粘贴 Cl* 配置订阅链接,随后点击 Download 下载配置文件。下载成功后,Cl* for Windows 将自动切换至下载的配置文件。

在这里插入图片描述

  • Proxies

切换代理模式为规则 (Rule)。

全局 (Global):所有请求直接发往代理服务器,代理所有流量
规则 (Rule):所有请求根据配置文件规则进行分流,只代理国外流量
直连 (Direct):所有请求直接发往目的地,不代理任何流量

在这里插入图片描述

5.3. 在 WSL2 (Windows Subsystem for Linux 2) 系统上配置

通过 export 指令临时设置代理:

(base) yongqiang@yongqiang:~$ export http_proxy="http://172.31.32.1:7890"
(base) yongqiang@yongqiang:~$ export https_proxy="https://172.31.32.1:7890"

查看代理:

(base) yongqiang@yongqiang:~$ env | grep -i proxy
https_proxy=https://172.31.32.1:7890
http_proxy=http://172.31.32.1:7890
(base) yongqiang@yongqiang:~$

在这里插入图片描述

测试方法:

wget www.google.com
curl www.google.com

wget --proxy http://172.31.32.1:7890 www.google.com
curl --proxy http://172.31.32.1:7890 www.google.com

5.4. 为 git 设置代理

临时设置 git 代理:

# Without Authentication
git config --global http.proxy http://172.31.32.1:7890
git config --global https.proxy https://172.31.32.1:7890

# With Authentication
git config --global http.proxy http://username:password@172.31.32.1:7890
git config --global https.proxy https://username:password@172.31.32.1:7890

取消 git 代理:

git config --global --unset http.proxy
git config --global --unset https.proxy

git 的任何全局设置都可以用 git config --global --unset * 来取消。

查看 git 代理:

git config --global --get http.proxy
git config --global --get https.proxy

查看 git 全局设置:

git config --global -l

查看 git 的全局设置。如果设置 git 代理成功,则列表输出会有以 http.proxy= and https.proxy= 开头的行。如果取消 git 代理成功,则以 http.proxy= and https.proxy= 开头的行将不会出现在列表输出中。

使用以下命令查看并修改 git 的配置,git 的默认编辑器会打开 ~/.gitconfig 文件。

git config --global --edit
(base) yongqiang@yongqiang:~$ git config --global http.proxy http://172.31.32.1:7890
(base) yongqiang@yongqiang:~$ git config --global https.proxy https://172.31.32.1:7890
(base) yongqiang@yongqiang:~$
(base) yongqiang@yongqiang:~$ git config --global -l
user.email=***@163.com
user.name=***@163.com
core.editor=vim
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
https.proxy=https://172.31.32.1:7890
http.proxy=http://172.31.32.1:7890
(base) yongqiang@yongqiang:~$
  • https://huggingface.co/ggerganov/whisper.cpp/tree/main
(base) yongqiang@yongqiang:~/whisper_work/whisper_cpp_models$ git lfs install
Error: Failed to call git rev-parse --git-dir: exit status 128
Git LFS initialized.
(base) yongqiang@yongqiang:~/whisper_work/whisper_cpp_models$
(base) yongqiang@yongqiang:~/whisper_work/whisper_cpp_models$ GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/ggerganov/whisper.cpp
Cloning into 'whisper.cpp'...
remote: Enumerating objects: 56, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 56 (delta 6), reused 1 (delta 1), pack-reused 48 (from 1)
Unpacking objects: 100% (56/56), 11.90 KiB | 380.00 KiB/s, done.
(base) yongqiang@yongqiang:~/whisper_work/whisper_cpp_models$
  • Git 命令设置详细跟踪级别

https://learn.microsoft.com/zh-cn/troubleshoot/azure/devops/git-clone-push-operation-failing-devops-repo

GIT_TRACE=1
GIT_TRACE_PACKET=1
GIT_TRACE_CURL_NO_DATA=1
GIT_CURL_VERBOSE=1
(base) yongqiang@yongqiang:~/whisper_work/whisper_cpp_models$ GIT_CURL_VERBOSE=1 GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/ggerganov/whisper.cpp
Cloning into 'whisper.cpp'...
...

6. 为 apt package manager 设置代理

To specify the proxy settings for apt, create or edit a file named apt.conf in /etc/apt directory.

  1. Create a new configuration file named proxy.conf
sudo vim /etc/apt/apt.conf
  1. Add the following line to set your HTTP proxy and HTTPS proxy
# With Authentication,
Acquire::http::Proxy "http://[username]:[password]@ [proxy-web-or-IP-address]:[port-number]";
Acquire::https::Proxy "http://[username]:[password]@ [proxy-web-or-IP-address]:[port-number]";
Acquire::ftp::Proxy "http://[username]:[password]@ [proxy-web-or-IP-address]:[port-number]";

# Without Authentication,
Acquire::http::Proxy "http://[proxy-web-or-IP-address]:[port-number]";
Acquire::https::Proxy "http://[proxy-web-or-IP-address]:[port-number]";
Acquire::ftp::Proxy "http://[proxy-web-or-IP-address]:[port-number]";
  1. Save your changes and exit the text editor.

Your proxy settings will be applied the next time you run apt.

References

[1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/
[2] 配置 HTTP 代理, https://support.huaweicloud.com/usermanual-hcli/hcli_22_001.html
[3] Use an HTTP proxy, https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-proxy.html
[4] Define proxy settings, https://help.ubuntu.com/stable/ubuntu-help/net-proxy.html.en
[5] gnutls_handshake() failed: Error in the pull function, https://github.com/microsoft/WSL/issues/5346
[6] How to Configure Proxy On Ubuntu 22.04, https://forum.huawei.com/enterprise/en/how-to-configure-proxy-on-ubuntu-22-04/thread/667281228052709376-667213860488228864
[7] Configuring a Global Proxy, https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-59/System-Configuration/Configuring-a-Global-Proxy/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Cheng

梦想不是浮躁,而是沉淀和积累。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值