本分步指南将解释如何将 cURL 或简单地 curl 与代理服务器一起使用。它涵盖了所有方面,从安装开始到解释设置代理的各种选项。
我们没有针对任何特定的代理服务。因此,本教程应该适用于所有代理服务器。您只需要知道服务器详细信息和凭据。
这是一个相当技术性的教程,希望读者对什么是代理有一个基本的了解。对于那些从网络抓取开始的人来说,这将特别有趣和有用。
什么是cURL ?
cURL 是一个命令行工具,用于使用 url 发送和接收数据。让我们看一下使用 curl 的最简单示例。打开终端或命令提示符并输入此命令,然后按 Enter:
curl https://www.google.com
这将获取页面的 HTML 并将其打印在控制台上。
curl https://www.google.com -I
这将打印文档信息。
HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
问题“什么是 cURL?” 在我们之前的一篇文章中也有回答。如果您想了解它如何成为如此普遍的资产,我们建议您阅读它。
安装
cURL 随许多 Linux 发行版和 MacOS 一起提供。现在它也随 Windows 10 一起提供。
如果你的 Linux 发行版没有提供它,你可以通过运行 install 命令来安装它。例如,在 Ubuntu 上,打开终端并运行以下命令:
sudo apt install curl
如果您运行的是旧版本的 Windows,或者如果您想安装替代版本,您可以从官方下载页面下载 curl 。
连接到代理需要什么
无论您使用哪种代理服务,您都需要以下信息才能使用:
- 代理服务器地址
- 港口
- 协议
- 用户名(如果需要身份验证)
- 密码(如果需要验证)
在本教程中,我们将假设代理服务器为127.0.0.1,端口为1234,用户名为user,密码为pwd。我们将研究涵盖各种协议的多个示例。
笔记。如果您在使用 NTLM 身份验证的网络上,则可以在运行 curl 时使用开关–proxy-ntlm 。类似地,–proxy-digest可用于摘要认证。您可以通过运行curl –help查看所有可用选项。本教程将提供必须指定用户名和密码的场景示例。
下一节将介绍第一个 curl 代理场景,它恰好是最常见的场景——带有 curl 的 HTTP 和 HTTPS 代理。
将 cURL 与 HTTP/HTTPS 代理一起使用
如果你还记得,我们研究过使用没有代理的 curl,如下所示:
curl https://httpbin.org/ip
这个特定的网站对于测试代理特别有用,因为此页面的输出是源 IP 地址。如果您正确使用代理,该页面将返回一个与您的机器不同的 IP 地址,即代理的 IP 地址。
有多种方法可以使用代理命令运行 curl。下一节将介绍作为命令行参数发送代理详细信息。
笔记。所有命令行选项或开关都区分大小写。例如,-f指示 curl 静默失败,而-F指示要提交的表单。
在 cURL 中设置代理的命令行参数
打开终端并输入以下命令,然后按 Enter:
curl --help
输出将是一个巨大的选项列表。其中一个看起来像这样:
-x, --proxy [protocol://]host[:port]
请注意,x很小,并且区分大小写。可以使用-x或–proxy开关提供代理详细信息。两者的意思是一样的。带有代理命令的 curl 机器人是相同的:
curl -x "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
或者
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
笔记。如果存在 SSL 证书错误,请在curl命令中添加-k(注意小k) 。这将在使用 SSL 时允许不安全的服务器连接。
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip" -k
您可能已经注意到代理 url 和目标 url 都用双引号括起来。这是处理 url 中的特殊字符的推荐做法。
这里要注意的另一个有趣的事情是默认代理协议是http。因此,以下两个命令将完全相同:
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
curl --proxy "user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

使用环境变量
将代理与 curl 一起使用的另一种方法是设置环境变量http_proxy和https_proxy。
请注意,使用环境变量设置代理仅适用于 MacOS 和 Linux。对于 Windows,请参阅解释如何使用_curlrc文件的下一节。
如果您查看这些变量名称的第一部分,它会清楚地显示将使用这些代理的协议。它与代理服务器本身使用的协议无关。
- http_proxy – 代理将用于访问使用 http 协议的地址
- https_proxy – 代理将用于访问使用 https 协议的地址
只需将变量http_proxy设置为 http 代理地址,并将https_proxy设置为 https 代理地址。打开终端并运行这两个命令。
export http_proxy="http://user:pwd@127.0.0.1:1234"
export https_proxy="http://user:pwd@127.0.0.1:1234"
运行这两个命令后,正常运行curl。
curl "http://httpbin.org/ip"
如果您看到 SSL 证书错误,请添加 -k 以忽略这些错误。
这里要注意的另一件事是这些变量适用于系统范围。如果不需要此行为,请通过取消设置以下两个变量来关闭全局代理:
unset http_proxy
unset https_proxy
请参阅下一节以仅为curl而不是系统范围设置默认代理。
将 cURL 配置为始终使用代理
如果您想要 curl 的代理而不是其他程序的代理,可以通过创建curl 配置文件来实现。
对于 Linux 和 MacOS,打开终端并导航到您的主目录。如果已经有.curlrc文件,请打开它。如果没有,请创建一个新文件。以下是可以运行的命令集:
cd ~
nano .curlrc
在此文件中,添加以下行:
proxy="http://user:pwd@127.0.0.1:1234"
保存文件。现在带有代理的 curl 可以使用了。只需正常运行curl ,它就会从.curlrc文件中读取代理。
curl "http://httpbin.org/ip"
在 Windows 上,该文件名为_curlrc。该文件可以放在%APPDATA%目录中。
要查找%APPDATA%的确切路径,请打开命令提示符并运行以下命令:
echo %APPDATA%
该目录类似于C:\Users\<your_user>\AppData\Roaming。现在转到这个目录,创建一个新文件_curlrc,并通过添加以下行来设置代理:
proxy="http://user:pwd@127.0.0.1:1234"
这在 Linux、MacOS 和 Windows 中的工作方式完全相同。

忽略或覆盖一个请求的代理
如果代理是全局设置的,或者通过修改.curlrc文件,仍然可以覆盖它以设置另一个代理甚至绕过它。
要覆盖一个请求的代理,请照常使用-x或–proxy开关设置新代理:
curl --proxy "http://user:pwd@1.0.0.1:8090" "http://httpbin.org/ip"
如果您想完全绕过代理请求,您可以传递–noproxy后跟“*”。这指示 curl 不对所有 URL 使用代理。
curl --noproxy "*" "http://httpbin.org/ip"
如果您有许多 curl 请求要在没有代理的情况下执行,但不更改系统范围的代理设置,则以下部分将向您展示如何执行此操作。
额外提示 – 快速关闭和打开代理
此技巧仅适用于高级用户。如果你不知道什么是 . bashrc文件是,您可以跳过本节。
您可以在.bashrc文件中创建一个别名来设置代理和取消设置代理。例如,使用任何编辑器打开.bashrc文件并添加以下行:
alias proxyon="export http_proxy=' http://user:pwd@127.0.0.1:1234';export https_proxy=' http://user:pwd@127.0.0.1:1234'"
alias proxyoff="unset http_proxy;unset https_proxy"
添加这些行后,保存.bashrc并更新 shell 以读取此.bashrc。为此,请在终端中运行此命令:
. ~/.bashrc
现在,当您需要打开代理时,您可以快速打开代理,运行一个或多个 curl 命令,然后关闭代理,如下所示:
proxyon
curl "http://httpbin.org/ip"
curl "http://google.com"
proxyoff
cURL 袜子代理
如果代理服务器使用 socks 协议,则语法保持不变:
curl -x "socks5://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
同样,根据 socks 版本,可以使用 socks4://、socks4a://、socks5:// 或 socks5h://。
或者,也可以使用开关–socks5而不是-x来设置 curl socks 代理。您可以使用相同的命令,但使用不同的开关:可以使用–proxy-user开关发送用户名和密码。
curl --socks5 "127.0.0.1:1234" "http://httpbin.org/ip" --proxy-user user:pwd
同样,可以使用–socks4、–socks4a或–socks5,具体取决于版本。
概括
cURL 是一个非常强大的自动化工具,可以说是代理支持方面最好的命令行界面。最后,由于 libcurl 与 php 配合得非常好,许多 Web 应用程序将其用于 Web 抓取项目,使其成为任何 Web 抓取工具的必备工具。
单击此处并查看 GitHub 上的存储库以查找本文中使用的完整代码。您还可以在我们的博客中了解更多关于使用 Selenium和其他一些有用的库(如Beautiful Soup或lxml 教程)进行网络抓取的信息。