如何将旋转代理与cURL一起使用
您在使用 cURL 时是否被网站阻止?最有效的技术之一是通过代理服务器路由您的请求,从而更难将您的流量识别为非人类流量。在本教程中,您将学习使用 cURL 代理的分步过程以及网络抓取时要考虑的最佳实践和协议。
cURL 中的代理是什么?
cURL 代理是一个服务器,充当客户端和目标服务器之间的中介,以增加匿名性和不受网络限制地访问资源。
它是这样工作的:
- 首先,客户端向代理服务器发送请求。
- 接下来,代理服务器将其转发到目标服务器。
- 来自目标服务器的响应返回给代理服务器。
- 最后,代理将响应转发给客户端。
如何将代理与 cURL 一起使用?
让我们看看如何使用 cURL 代理服务器通过 Internet 发送和接收数据。
cURL语法
在我们开始之前,有必要指出 cURL 语法的最重要方面:
- PROTOCOL:代理服务器的 Internet 协议,例如 HTTP 和 HTTPS。
- HOST:代理服务器的主机名、IP 地址或 URL。
- PORT:为代理服务器提供的端口号。
- URL:代理服务器将与之通信的目标网站的 URL。
curl --proxy <PROTOCOL>://<HOST>:<PORT> <URL>
使用 cURL 设置代理
以下是使用 cURL 设置代理所需执行的操作:
[PROTOCOL://]HOST[:PORT]
首先将代理服务器的地址和端口号以及目标 URL替换为<https://httpbin.org/ip>
(测试页面)。您可以找到许多免费代理。
接下来,在您的计算机上打开终端或命令提示符,并运行以下命令以使用代理发出请求:
curl --proxy "http://144.76.60.58:8118" "https://httpbin.org/ip"
您得到的响应应该是一个包含代理服务器 IP 地址的 JSON 负载:
如何提取数据
考虑上面的 cURL 代理示例,它传递了一个带有origin
字段的 JSON 对象。要提取该字段的值,请jq
与上一个命令一起使用。
curl -x "http://144.76.60.58:8118" "https://httpbin.org/ip" | jq ".origin"
在运行之前确保jq
已安装在您的机器上。
输出是字段的实际值origin
,在本例中是响应中返回的 IP 地址。
使用 cURL 进行代理身份验证:用户名和密码
cURL 支持代理身份验证,允许网络抓取工具访问这些代理服务器,同时仍然遵守其安全措施。
下面介绍如何使用 cURL 和经过身份验证的代理连接到 URL。
首先,您需要使用--proxy-user option
.
例如,假设您要连接到需要http://proxy-url.com:8080
使用用户名user
和密码进行身份验证的代理服务器pass
。执行该操作的 CLI 命令如下:
curl --proxy http://proxy-url.com:8080 --proxy-user user:pass http://target-url.com/api
此命令将使用提供的用户名和密码进行身份验证,通过指定的代理将 HTTP 请求发送到目标 URL。
此外,您需要在请求标头中包含代理授权标头。cURL 中的选项--proxy-header
允许您这样做,如下所示:
curl --proxy http://proxy-url.com:8080 --proxy-user user:pass --proxy-header "Proxy-Authorization: Basic dXNlcjEyMzpwYXNzMTIz" http://target-url.com/api
cURL最佳实践
查找接下来使用 cURL 代理时的最佳实践。
cURL 代理的环境变量
环境变量对于 cURL 代理很重要,因为它们允许您将代理服务器 URL、用户名和密码设置为可以通过 cURL 命令访问的变量,而不是每次都手动输入值。这样可以节省时间和精力,并使针对不同任务管理多个代理变得更加容易。
要使用 cURL 代理环境变量,请按照下列步骤操作:
首先,在您的终端中,使用命令将代理服务器 URL、用户名和密码设置为环境变量export
。将username
和替换password
为适合您的代理服务器的值。如果不需要身份验证,您可以从 URL 中省略用户名和密码。
export http_proxy=http://<username>:<password>@proxy-url.com:8080 export https_proxy=https://<username>:<password>@proxy-url.com:8080
如果您使用的是 Windows 操作系统,请运行以下备用命令:
set http_proxy=http://<username>:<password>@proxy-url.com:8080 set https_proxy=https://<username>:<password>@proxy-url.com:8080
接下来,通过使用符号引用环境变量,在您的 cURL 命令中使用它们$
。
curl -x $http_proxy https://httpbin.org/ip
创建别名
别名在 curl 中很重要,因为它们有助于简化和精简发出重复或复杂 curl 请求的过程。通过设置别名,您可以为具有特定选项和参数的特定 curl 命令创建快捷方式,以便将来再次运行该命令更容易,而无需记住或重新键入所有详细信息。这可以节省时间并降低出错的风险。
此外,别名有助于使 curl 命令更具可读性和更易于理解,特别是对于不太熟悉可用语法或选项的用户而言。要创建别名,您可以alias
在终端中使用命令。例如,您可以通过运行命令为ls -l
as创建一个别名。ll
alias ll="ls -l
首先使用文本编辑器打开 shell 的配置文件,例如.bashrc
或。.zshrc
此文件通常位于home/<username>/
Mac 上的文件夹和c/Users/<username>
Windows 上的文件夹中。如果文件不存在,您也可以在此文件夹中创建该文件。
下一步是将以下代码片段添加到文件中以创建别名。在这种情况下,curlproxy
是别名的名称,$http_proxy
下面的代码片段中使用的是我们在上一节中创建的环境变量。您还可以根据自己的喜好自定义别名。
alias curlproxy='curl --proxy $http_proxy'
现在,您可以使用curlproxy
别名后跟要通过代理连接到的 URL。例如,要通过代理连接到“https://httpbin.org/ip”,您可以运行以下命令:
curlproxy https://httpbin.org/ip
使用 .curlrc 文件进行更好的代理设置
该.curlrc
文件是一个文本文件,其中包含一个或多个在您运行命令时传递给 cURL 的命令行选项。您可以存储您的 cURL 设置,包括代理配置,因此可以更轻松地管理您的命令。
要将.curlrc
文件用于带有代理的 cURL,请执行以下操作:
.curlrc
在您的主目录中 创建一个名为的新文件。- 将以下行添加到文件中以设置您的代理服务器 URL、用户名和密码,然后保存:
proxy = http://user:[email protected]:8080
- 如果需要用户名和密码,请按如下所示添加:
proxy = http://user:[email protected]:8080
- 运行默认的 cURL 命令以
<https://httpbin.org/ip>
通过您在文件中设置的代理进行连接.curlrc
:
curl https://httpbin.org/ip
将旋转代理与 cURL 结合使用
轮换代理对于网络抓取很重要,因为它们通过更改用于每个请求的 IP 地址来帮助避免 IP 阻止和被网站阻止。
让我们看看如何使用 cURL 代理使用免费解决方案和付费解决方案来做到这一点,并了解为什么第二种类型是关键。
使用免费解决方案轮换 IP
在此示例中,我们将使用免费提供程序通过 cURL 设置轮换代理。
首先,转到免费代理列表以获取免费代理 IP 地址列表。记下您要使用的轮换代理的 IP 地址、端口和身份验证凭据(如果有)。
接下来,将username
、password
、ipaddress
和替换port
为轮换代理列表的值,并将它们保存在.curlrc
上面创建的文件中:
proxy = http://<username>:<password>@<ipaddress>:<port> proxy = http://<username>:<password>@<ipaddress>:<port> proxy = http://<username>:<password>@<ipaddress>:<port>
最后,通过打开命令提示符并运行以下命令来测试旋转代理是否工作:
curl -v https://www.httpbin.org/ip
输出应显示您保存在.curlrc
文件中的 IP 地址之一。
{"origin": "162.240.76.92"}
高级代理以避免被阻止
虽然免费轮换代理解决方案是一种在不被发现的情况下抓取网站的有效方法,但它可能并不总是可靠的。如果您需要更高的稳定性和更快的连接速度,高级代理服务可能是避免被阻止的更好选择。
进入 Request Builder 页面后,粘贴https://coingecko.com
为目标 URL,选择 cURL 并复制您将获得的代码。
curl -L -x "http://<your-api-key>:@proxy.zenrows.com:8001" -k "https://coingecko.com"
这是发送请求后返回的响应:
如果需要,使用 –noproxy 忽略代理 在本地开发爬虫时,您可能希望绕过代理服务器以检查它们是否正常工作。这将公开您的本地 IP,但也会确保脚本正常运行。
那么,让我们看看如何使用该curl --noproxy
选项来实现这一目标。
首先确定要忽略代理的主机或域。例如,如果你想忽略它们www.httpbin.org
,下面是你应该在终端中运行的命令:
curl --noproxy httpbin.org http://www.zenrows.com
当该--noproxy
选项与 cURL 一起使用时,它指定应忽略任何请求的代理服务器。当您需要直接访问网站而不通过代理服务器时,这会很有用。如果需要,该--noproxy
选项还可用于从代理服务器中排除某些主机或域。请务必注意,如果--noproxy
未使用该选项且未指定代理服务器,cURL 将尝试使用系统的默认代理设置。
最有效的代理和协议
cURL 代理协议和代理类型的选择会显着影响网络通信的性能和可靠性。
让我们看看最有效的选择!
最佳 cURL 代理类型
以下是一些流行的 cURL 网络抓取代理:
- 住宅:这些代理使用与真实住宅位置关联的 IP 地址。这使得它们不太可能被反机器人系统检测到和阻止。
- 数据中心:这是一个与互联网服务提供商 (ISP) 无关的代理服务器。它们被广泛用于网络抓取,因为它们速度快、价格低廉并且提供匿名性。
- 4G 代理:通过 4G LTE 连接路由互联网流量的移动代理服务器。它们通常比数据中心代理更昂贵,但提供更高的匿名性和更好的可靠性。
从我们的详细教程中了解有关不同类型的网络抓取代理的更多信息。
协议
现在,让我们看看 cURL 支持的最流行的协议:
- HTTP:超文本传输协议,网络数据通信的基础。
- HTTPS:通过加密 (SSL/TLS) 添加安全层的 HTTP。
- FTP:文件传输协议,用于通过互联网在服务器和客户端之间传输文件。
- FTPS:通过加密 (SSL/TLS) 添加安全层的 FTP。
- LDAP:轻量级目录访问协议,一种开放的、供应商中立的行业标准应用协议,用于通过 Internet 协议 (IP) 网络访问和维护分布式目录信息服务。
- LDAPS:通过加密 (SSL/TLS) 添加安全层的 LDAP。
HTTP、HTTPS 和 SOCKS 是网络抓取中用于实现客户端和服务器之间通信的最相关协议。
结论
使用 cURL 代理可以极大地增强您的网络抓取能力。它允许您避开 IP 块并访问受地理限制的内容。但是,要记住的最佳做法是轮换代理和设置环境变量。
然而,免费代理并不可靠,因此您可能需要考虑高级代理提供商。ZenRows提供带住宅代理的轮换服务,您可以选择任何国家,而且它比传统替代方案便宜得多。此外,它还具有额外的反机器人绕过功能。注册并获得 1,000 个免费积分。
常见问题
如何在 cURL 命令中设置代理?
要在 cURL 命令中设置代理,请使用-x
或--proxy
选项,后跟代理服务器 URL。例如,curl -x http://proxy-url.com:8080 https://target-url.com
将使用 HTTP 代理服务器http://proxy-url.com:8080
访问https://target-url.com
.
cURL 的默认代理端口是什么?
cURL 的默认代理端口为 1080。但是,这可能因所使用的代理服务器而异。始终建议与代理提供商核实,但如果未指定端口,它将默认为端口 1080。
我如何知道 cURL 是否在使用代理?
-v
您可以通过 cURL 命令中的选项检查 cURL 是否正在使用代理。它将显示详细输出,您可以在其中查看请求的详细信息。如果使用代理,您将在输出中看到代理服务器和端口号。
如何绕过 cURL 命令中的代理?
要绕过 cURL 命令中的代理,请使用该--noproxy
选项,后跟要从代理中排除的以逗号分隔的主机或域列表。例如,将绕过对和 的curl --noproxy proxy1.com,proxy2.net https://www.target-url.com
请求的代理,但不会绕过其他请求。proxy1.com
proxy2.net
如何让 cURL 忽略代理?
cURL--proxy
选项允许用户指定用于发送 HTTP/HTTPS 请求的代理服务器。此 cURL 代理设置将通过指定的代理服务器路由所有请求,有效地隐藏 IP 地址并绕过网络限制。