在这篇文章中,我们将介绍:
- 什么是 curl
- 安装 curl。
- 开始使用代理需要什么
- 如何在 curl 中指定 HTTP/HTTPS 代理。
- 如何在 curl 中设置 SOCKS 代理。
- 你应该了解的窍门和技巧
- 哪些代理最适合 curl?
什么是 cURL?
cURL 是 “客户端 URL” 的缩写,是一种通过 URL 在互联网发送和接收数据的工具。作为一个软件项目,cURL 提供库 (libcurl
) 和命令行工具 (curl
)。这里,我们将重点介绍 curl
,一款通过 URL 语法传输数据的命令行工具。
该项目支持多种协议,包括 HTTP、HTTPS、FTP、FTPS、SFTP、POP3、POP3S、IMAP、IMAPS、LDAP、LDAPS、SCP 等等。这使得 curl
成为世界上最受欢迎、使用最广泛的命令行 HTTP 客户端。
cURL 用途广泛,是执行各种任务的常见解决方案,例如发出 HTTP 请求、下载文件、上传数据以及与 API 交互。它具备多种功能,包括请求自定义和代理支持。
安装 curl
现在我们来学习一下如何在计算机上安装 curl
。
macOS
你不需要在 macOS 上安装 curl
。macOS 操作系统已包含此工具,可以在 Terminal 应用程序中本地使用。
Windows
从 Windows 10 开始,Windows 系统自带 curl
的副本。同时, curl
命令是 PowerShell Invoke-WebRequest
命令的别名。这意味着 Windows 终端中的 curl
命令将在后台调用 Invoke-Request
。为了避免这种情况并实际使用 cURL 中的 curl
,请将 “curl” 替换为 “curl.exe”。这样,PowerShell 将运行 curl 而不是 Invoke-Request
。
例如,你可以使用以下命令在终端中验证安装在 Windows 计算机上的 curl
的当前版本:
curl.exe --version
这样会显示类似于以下的内容:
curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN
Release-Date: 2023-03-20
Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp
Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets
如果你是 Windows 用户,请将文章命令中的所有 “curl” 实例替换为 “curl.exe” 字符串。否则,请设置适用于 Linux 的 Windows 子系统 (WSL) 并按照以下说明进行操作。
Linux
在 Linux 上安装 curl
的过程会根据你使用的特定发行版而有所不同。默认情况下系统自带热门的 Linux 发行版,例如 Ubuntu 和 Fedora。因此,你可以直接在终端中使用 curl
。
其他发行版可能不包含 curl
。这种情况下,你可以使用发行版软件包管理器来添加 curl。在基于 Debian 的操作系统上,你可以使用以下命令安装 curl:
sudo apt-get install curl
在 curl
中使用代理需要什么
代理在客户端和目标服务器之间充当媒介,拦截来自客户端的请求,将其转发到服务器,接收来自服务器的响应,然后将其发送回客户端。这种媒介方式更有助于保持匿名,避免网络限制。这是因为目标服务器会认为请求来自所选代理服务器的 IP 和位置以及来自你。
想要开始通过代理服务使用 curl,你首先需要访问代理。具体而言,代理 URL 的语法如下所示:
[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]
这包括:
<协议>
:用于连接代理服务器的协议。如果未指定协议,curl 将默认为 http://。<主机>
:代理服务器的主机名所需 IP 地址或 URL。<端口>
:代理服务器正在监听的端口号。如果未指定端口,curl 将默认使用 1080。<用户名>
:需要身份验证时指定的可选用户名。<密码>
:需要身份验证时指定的可选密码。
至于代理协议,最受欢迎的是 HTTP 和 HTTPS,其次是 SOCKS。
这时候要检索有效的 HTTP 代理!
你可以从免费代理列表中免费获取一个,如下所示:
IP Address: 71.19.249.97; Port: 8443
这意味着代理 URL 是:
http://71.19.249.97:8443
出于学习目的可以选择这样的解决方案,但在实际情况下不能采用。免费代理服务不可靠、容易出错、速度慢、时效短而且会收集大量数据。请勿使用这些服务!
有何解决方案?使用市面上最好的代理服务提供商 Bright Data 的高级代理 。订阅并免费试用我们的可靠代理。
请记住,高级解决方案具备身份验证保护机制。假设协议是 HTTP
,主机是 71.103.203.109
,端口是 9321
,证书对是 admin-32458
和 rTuJ3tEwf
。这种情况下,curl 代理 URL 将为:
http://admin-32458:@rTuJ3tEwf71.103.203.109:9321
如何在 curl
中指定 HTTP/HTTPS 代理
开始之前,在终端中启动以下命令:
curl "https://httpbin.org/ip"
如你所见,curl
的基本语法是:
curl [optional_commands] <URL>
一项 curl
最佳实践建议在 URL 前后使用双引号,以避免出现特殊字符的问题。
运行后就会得到:
{
"origin": "194.33.243.7"
}
HTTPBin 项目帮助你获取 HTTP 请求的相关信息。详细而言,/ip
端点返回请求的源 IP,即执行请求的计算机的 IP 地址。换句话说,它会返回你的 IP。
在 curl
中设置代理后,你将能看到代理服务器的 IP 地址,而非自己的 IP 地址。
在 curl
中设置代理有若干方法。现在让我们来看看在 curl
中指定 HTTP/HTTPS 代理的最常用方法。
使用命令行参数
curl 提供两个命令行参数来设置代理 URL:
-x
--proxy
两者可以互换使用,因为它们的作用完全相同。后者只是前者的别名。
因此,通过代理服务使用 curl
的语法变为:
curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>
或:
curl --proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>
注意:在 curl
中,命令行选项区分大小写。例如, -x
和 -X
有两种不同的含义。
如果你现在启动:
curl -x "http://71.19.249.97:8443" "https://httpbin.org/ip"
或等效的:\
curl --proxy "http://71.19.249.97:8443" "https://httpbin.org/ip"
你将得到:
{
"origin": "71.19.249.97"
}
源与代理服务器 IP 相匹配。这意味着目标站点会如预期一样,认为请求来自代理。大功告成!
不要忘记免费代理的时效短,因此当你阅读本文时,上述服务器不太可能还有效。如果出现错误,请将其替换为新的代理。
使用环境变量
在 curl
中使用代理的另一种方法是设置以下两个环境变量:
http_proxy
:用于访问涉及 HTTP 协议的 URL 的代理服务器 URL。https_proxy
:用于访问涉及 HTTP 协议的 URL 的代理服务器的 URL。
在 macOS 和 Linux 上,你可以使用以下语法设置这两个环境:
export http_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
export https_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
因此,这两个命令将变成:
export http_proxy="http://71.19.249.97:8443"
export https_proxy="http://71.19.249.97:8443"
在 Windows 上,你需要使用以下 PowerShell 语法:
$env:http_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
$env:https_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
然后,在我们的示例中:
$env:http_proxy = "http://71.19.249.97:8443"
$env:https_proxy = "http://71.19.249.97:8443"
从现在起,每个 curl
命令都将经过指定的代理,不必使用 -x 选项:
同样,这将返回:
curl https://httpbin.org/ip
{
"origin": "71.19.249.97"
}
如需关闭 curl
代理,请使用以下命令取消环境变量的设置:
unset http_proxy
unset https_proxy
或者在 Windows 上:
$env:http_proxy = ""
$env:https_proxy = ""
curl
将恢复其标准行为, https://httpbin.org/ip
现在将返回你的 IP。
使用配置文件
您可以通过创建 .curlrc
配置文件为 curl
全局指定代理。
在 Linux 和 macOS 上打开终端并导航到你的主目录:
cd ~
然后,使用 nano 访问 .curlrc:
nano .curlrc
如果文件已存在,则文件将被打开。否则将首先创建文件然后再打开。
将以下行添加到 .curlrc
文件:
proxy="http://71.19.249.97:8443"
此指令的语法是:
proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"
保存文件,关闭终端并重启。
在 Windows 上,你需要在 %APPDATA%
目录内创建内容相同的 _curlrc
文件。将 %APPDATA%
粘贴到文件资源管理器地址栏中,然后按回车键访问该目录。
这样你会来到 C:\Users\<YOUR_USER>\AppData\Roaming
。
现在,curl
将自动使用配置文件中指定的代理:
curl "http://httpbin.org/ip"
你会得到:
{
"origin": "71.19.249.97"
}
太棒了!你刚刚学会了如何用三种不同的方式在代理服务器上使用 curl
!
如何在 curl 中设置 SOCKS 代理
如果你想使用 SOCKS 代理,命令结构保持不变:
curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>
主要区别在于 <协议>
将是 socks4
、socks4a
、socks5
或 socks5h
,而非 http
和 https
。
curl
SOCKS 代理正在运行的完整示例是:
curl -x "socks5://94.14.109.54:2478" "http://httpbin.org/ip"
如你所料,结果将是:
{
"origin": "94.14.109.54"
}
另一种方法涉及 --socks4
、--socks4a
、--socks5
命令行选项而不是 -x。这种情况下,必须在选项后设置不带用户名和密码的代理 URL,然后在 --proxy-user
后设置证书:
curl --socks4|--socks4a|--socks5 <HOST>[:<PORT>] <URL> --proxy-user <USERNAME>:<PASSWORD>
例如:
curl --socks4 "93.16.238.41:8721" "http://httpbin.org/ip" --proxy-user admin334:kv4NsDgc3
这将通过 93.16.238. 41:8721
socks4
代理连接到 HTTPBin,同时使用 admin334
作为身份验证的用户名、kv4NsDgc3
作为密码。
你应该了解的窍门和技巧
在本节中,您将看到专业使用 curl
代理的有趣技巧和宝贵诀窍。
快速开启和关闭代理
这里的方法是定义别名,通过带有自定义命令的环境变量,以编程方式设置和取消设置代理。
在 macOS 和 Linux 上,你可以通过创建 .bashrc
文件来完成这项操作。这是用户每次登录时都会执行的脚本文件。
移至你的主文件夹:
cd ~
然后,创建或打开一个 .bashrc 文件:
nano .bashrc
将以下格式的内容添加到文件:
alias proxyon="export http_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]';export https_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]'"
alias proxyoff="unset http_proxy;unset https_proxy"
因此,在我们的示例中它将是:
alias proxyon="export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'"
alias proxyoff="unset http_proxy;unset https_proxy"
保存文件并重启计算机。
现在,你可以使用以下命令激活和停用 curl
代理:
proxyon
curl "http://httpbin.org/ip"
# other HTTP requests...
proxyoff
注意自定义的 proxyon
和 proxyoff
命令。这些命令执行 .bashrc
文件中的别名指定的操作。
在 Windows 上,你可以使用 PowerShell 别名实现类似的效果。
忽略单个请求的代理
如果你想阻止 curl
为特定请求使用已配置的代理,你可以使用 --noproxy “*
” 参数,如下所示:
curl --noproxy "*" <URL>
这会指示 curl
不要对所有 URL 使用代理。
设置代理并运行:
curl --noproxy "*" "https://httpbin.org/ip"
生成的源将包含你的 IP,而非代理服务器的 IP。
避免 SSL 证书错误
在 curl
中使用代理时,你的请求可能会由于 SSL 证书错误而失败。为避免这种情况,请按以下语法使用 -k
选项:
curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -k <URL>
-k
允许通过 SSL 进行不安全的服务器连接,从而帮助你避免证书错误。
例如,你可以通过以下方式避开 SSL 问题联系 HTTPBin:
curl -x "http://71.19.249.97:8443" -k "https://httpbin.org/ip"
获取请求相关的更多信息
当 curl
中的请求失败时,想要了解发生了什么并不容易。如需诊断错误并查看 curl
执行的所有操作,请设置 -v 选项:
curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -v <URL>
这将输出已建立的连接和该工具所使用的标头相关的详细信息:
$curl -x "http://71.19.249.97:8443" -v "https://httpbin.org/ip"
* Trying 71.19.249.97:8443...
* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)
* allocate connect buffer
* Establish HTTP proxy tunnel to httpbin.org:443
> CONNECT httpbin.org:443 HTTP/1.1
> Host: httpbin.org:443
> User-Agent: curl/8.0.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.0 200 OK
<
* CONNECT phase completed
* CONNECT tunnel established, response 200
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
* ALPN: server accepted http/1.1
* using HTTP/1.1
> GET /ip HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/8.0.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sat, 26 Aug 2023 10:39:13 GMT
< Content-Type: application/json
< Content-Length: 31
< Connection: keep-alive
< Server: gunicorn/19.9.0
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
<
{
"origin": "71.19.249.97"
}
* Connection #0 to host 71.19.249.97 left intact
哪些代理最适合 curl
?
这个问题的答案取决于你的用例和你提出的 curl
请求的性质。想要找到适合你需求的解决方案,请查看可用的不同类型的代理:
- 数据中心代理:速度很快,但由于其 IP 范围可识别,可能很容易被站点检测和屏蔽。
- 住宅代理:保证了高度的匿名性,因为它们提供来自特定位置真实设备的 IP 地址。住宅代理非常适合访问采用地理限制屏蔽或反机器人措施的站点,也是执行 curl 网页抓取的理想选择。
- ISP 代理:提供的 IP 来自登记至 ISP 的设备,因此快速、安全且高度可靠。ISP 代理是 SEO 监控、网页浏览和市场调研的完美解决方案。
- 移动代理:提供来自真实移动设备的 IP 以实现高度匿名性。它们对于访问特定于移动设备的应用程序、站点或内容很有用。
这只是一个简短的回顾,但你可以在我们的代理 IP 类型指南中了解更多信息。
结语
在本 curl 代理指南中,你了解了 cURL
是什么、它能提供什么,以及如何设置 HTTP/HTTPS/SOCKS 代理。事实证明,你不能信任由免费提供商提供代理服务的 curl。因此,需要做出的主要技术决定是采用哪个代理提供商。节省时间和精力,选择市面上最好的服务 — Bright Data。
Bright Data 掌控着全球最好的代理服务器,为财富 500 强企业和 20,000 多家客户提供服务。其全球代理网络包括:
- 数据中心代理 — 770,000 多个数据中心 IP。
- 住宅代理 — 7200 多万个住宅 IP,覆盖超过 195 个国家/地区。
- ISP 代理 — 超过 700,000 个 ISP IP。
- 移动代理 — 700 多万个移动 IP。
总体而言,这是市面上最大而且最可靠的抓取型代理网络之一。加入最大的代理网络并免费试用。