跳到主要内容

用 cURL 搭配代理:完整指南

想借助代理发挥 cURL 的效果吗?本文将介绍如何设置和使用 cURL 代理。

您在与网页服务器交互时经常使用 cURL 吗?如果是这样,很可能已经有一两个网站封禁了您的 IP 地址

也许是您在短时间内发送了过多请求,也许是网站本身有反数据抓取的规定。这类限制正是 cURL 代理存在的原因:这类服务器能够隐藏请求的真实来源 IP 地址

本文将深入探讨如何用 cURL 搭配代理,涵盖最基础的cURL 使用场景、cURL 的代理配置方法等内容,请继续往下阅读了解详情。

什么是 cURL?

客户端 URL 工具(cURL,发音为“kurl”)是一种简单的命令行工具,用于向网页服务器发送请求。它在 Linux、Unix、Windows 和 Mac 等大多数平台上都预装可用。

cURL 类似于Postman API工具,灵活性更高,但没有图形界面。

您可以在电脑终端上使用不同的 cURL 命令和选项向网页服务器发送请求

此外,cURL 使用libCURL 客户端 URL 传输库,对以下主流互联网协议均提供支持:

  • HTTP——超文本传输协议
  • HTTPS——安全超文本传输协议
  • FTP——文件传输协议
  • FTPS——安全文件传输协议
  • SCP——安全复制协议
  • MQTT——消息队列遥测传输协议
  • 以及其他多种协议

了解了 cURL 命令之后,接下来深入了解其语法结构,理解其工作原理。如需进一步了解如何在 API 场景下使用 cURL,请参阅我们的cURL API 指南。

理解 cURL 语法

我们来看一个真实的 cURL 示例。这里将执行一个简单的GET 命令,从 Google 网站获取基础信息,并对其进行拆解分析。

命令如下:

 curl -L [protocol]://example.com

下面逐步分析这条命令:

  • -L 参数

“-L”参数指示 cURL跟随服务器在 HTTP 响应中返回的所有重定向。

因此,如果 Google 返回 301 重定向错误,cURL 会继续发送请求,直到到达最终服务器并返回所请求的数据。

“-L”参数只是用于发送网络请求的一系列命令行协议选项之一,其他常用选项包括:

-I, --head:仅显示文档信息

-i, --include: 在输出中包含 HTTP 响应头。

下面是一组类似的输出选项:

-o, --output <file>:将输出写入 <file>,而不是标准输出

-O, --remote-name:以远程文件名将输出写入本地文件

-s, --silent:静默模式(不输出任何信息)

-v, --verbose:输出更详细的执行信息

-w, --write-out <format>:完成后按指定格式输出结果

2. [PROTOCOL]

将此处替换为发送 GET 请求所使用的协议——HTTP 或 HTTPS。

3. 目标 URL

输入目标 URL,本例中为google.com。

输入这些信息后,您应该会得到如下响应:

IMG1.png

这基本上就是 Google 的HTML 代码,其中包含标题、元信息、文本内容、链接等更多有价值的信息。

如果想获得更详细的响应,可以在命令中加入“-v”或“--verbose”选项,它会让 cURL 提供更全面的结果。

语法如下:

curl --verbose -L http://google.com

响应结果:

IMG2.png

cURL 的常见应用

以下是 cURL 的一些常见使用场景:

  • 网页开发与测试:开发者使用 GET、POST、PUT、DELETE 等HTTP 请求来测试和调试 API
  • 数据传输:HTTP 和 HTTPS 等协议便于向网页服务器发起数据请求
  • 自动化与脚本编写:开发者常将 cURL 命令嵌入脚本,实现数据上传和下载的自动化
  • 网络测试与故障排查:可以使用 cURL 测试各类 URL 的连通性
  • 代理服务器配置与测试:可以使用 cURL 测试代理服务器的性能和连通性

还在权衡该用哪个工具?我们的cURL 与 Wget 对比一文详细分析了不同任务场景下各自的适用性。

为什么要使用 cURL 代理服务器?

显而易见,cURL 命令主要用于向网络服务器发送请求。

既然如此,为什么还要考虑cURL代理服务器相关的问题呢?

根据您当前的需求、所在地区以及想要访问的资源,您很可能会发现普通的网络连接往往难以满足需求

原因如下:

  • 匿名性与隐私保护

如果希望隐藏自己的位置和身份,可以考虑选择像MarsProxies这样注重隐私保护的代理服务商。cURL 代理会隐藏您的真实 IP 地址,让网站无法探知 HTTP 请求的真实来源。

  • 绕过地域限制

“403 forbidden”错误代码相当于网页服务器在委婉地告诉您:它已理解您的请求,但拒绝授权,原因可能是所请求的内容受到限制

为避免遇到这类令人困扰的情况,可以将请求通过来自有权访问该资源地区的 cURL 代理转发

  • 负载均衡

大多数网站在检测到某个 IP 地址的请求频率异常高时,都会对其加以限制。代理服务器可以将请求分散到多个 IP 地址上,从而避免触发速率限制

  • 绕过防火墙和过滤器

如果您需要的资源在公共网络中受限,被严密地屏蔽在防火墙之后,该怎么办?可以将请求通过代理服务器转发,从而绕开这些限制。

  • 测试与开发
  • 开发者使用代理来评估网站和应用程序在不同网络条件下的表现。
  • 提升性能与可靠性

通过代理服务器发送 cURL 请求,有时能带来更稳定的连接。这类服务器可以将网络流量路由至比传统连接更稳定可靠的网络路径

cURL 代理服务器的类型

了解了 cURL 代理的优势后,接下来看看可供选择的几种代理服务器类型:

HTTP 代理

HTTP 代理非常适合简单的网页浏览和 HTTP 请求。它具备内容过滤与监控功能,特别适用于需要管控网络访问的环境,例如学校或办公室。

不过,HTTP 代理不处理加密数据,传输过程中数据可能面临被截获的风险

HTTPS 代理

HTTPS 代理能够处理加密流量,因而具备更好的隐私保护能力,非常适合处理敏感信息,例如个人数据、登录凭证和财务数据

使用时请注意,加密和解密过程可能会降低代理服务器的响应速度。

SOCKS 代理

SOCKS 代理支持的协议范围超出 HTTP 和 HTTPS,例如可以处理FTP 和 SMTP邮件协议,以及各类 TCP 应用层协议

不过需要说明的是,SOCKS 代理不会对流量进行加密,并且由于它不绑定任何特定协议,因此无法检查或修改数据内容

如何在 cURL 中使用代理

已经选定要在 cURL 中使用的代理服务器了吗?下面介绍如何在您的设备上完成设置。

方法一:使用命令行参数

要通过命令行参数设置 cURL 代理,可以使用“-x”或“--proxy”选项,后面跟上代理信息

下面是使用“-x”选项设置 HTTP 代理隧道的方法:

curl -x http://proxyserver:port https://example.com

如果所用服务器需要身份验证,请按以下格式添加 cURL 代理信息:

curl -x https://username:password@proxyserver:port https://secure.example.com

方法二:使用环境变量

环境变量是 cURL 检查某些预设条件、从而决定其运行方式的一种方法

下面介绍如何为 cURL 命令配置代理设置:

Windows 设备上的操作

  • 第一步:使用以下键盘快捷键在 Windows 设备上打开命令提示符:

Win + R, then type "cmd" and press Enter.

  • 第二步:如需设置临时代理,请输入以下命令:

set http_proxy=http:////<HOST>:<PORT> <URL>

set https_proxy=https://<HOST>:<PORT> <URL>

Mac/Linux 设备上的操作

  • 第一步:输入以下快捷键:

Ctrl + Alt + T

  • 第二步:使用以下命令打开终端:

Press Cmd + Space to open spotlioght and type "Terminal" then press enter

  • 第三步:输入代理详细信息:

export http_proxy=http://proxyserver:port

大功告成!您现在已成功设置了临时代理环境变量。

只要当前会话保持打开,cURL 就会通过这些地址发送请求。但如果关闭当前终端会话,已设置的代理配置就会被清除

如果希望 cURL 代理长期生效,需要创建一个cURL 配置文件。此后每次运行,命令行工具在发送任何请求前都会先读取这个文件。

配置 cURL 使其在发送请求时始终使用代理服务器

下面介绍如何创建 cURL 配置文件:

Unix/Linux/macOS 设备

  • 第一步:打开终端并进入您的主目录
  • 第二步:运行以下命令创建一个新文件

cd ~

nano .curlrc

  • 第三步:添加代理授权信息行:

proxy=http_proxy=http://proxyserver:port

完成代理授权信息设置后,文件即已就绪。此后正常运行 cURL 时,它会从 .curlrc 文件中读取代理服务器的详细信息。

Windows 设备

在 Windows 设备上,配置文件的命名方式略有不同,名为“_curlrc”,位于 %APPDATA%目录下

  • 第一步:要找到准确路径,请打开命令提示符并运行以下命令:

echo %APPDATA%

  • 第二步:得到的结果大致会是这样:

C:\Users\<your user>\AppData\Roaming

  • 第三步:前往该目录,新建一个名为“_curlrc”的文件,并添加以下代理设置:

proxy=http_proxy=http://proxyserver:port

大功告成!您现在已配置好 cURL,使其在发送请求时始终使用该代理连接

如何测试 cURL 代理

既然已经用 cURL 设置好了代理服务器,接下来就需要确认它是否真正生效。

使用以下语法:

curl -v -x [protocol]://[proxy_address]:[port] [URL]

  • [protocol]:根据您所使用的代理类型,替换为 HTTP 或 HTTP(S)
  • [proxy_address]:替换为您的 cURL 代理的 IP 地址或主机名
  • [port]:替换为您的 cURL 代理所使用的端口号
  • [URL]:替换为您要访问的 URL

如果您要测试 SOCKS 代理,请确保在代理字符串中指定该协议。

添加认证信息

如果代理服务器需要认证,您可以使用以下语法附加认证信息:

curl -x http://username:password@proxy_address:port http://example.com

使用这种方法,您可以通过向返回 IP 信息的服务发送请求,确保您的地址不会泄露信息,一个很好的例子是 WhatIsmyIPAddress.com。

请使用以下语法:

curl -v -x http://username:password@proxy_address:port https://whatismyipaddress.com/

以下是我们使用 Mars 快速住宅代理获得的响应:

IMG3.png

简而言之,如果您的HTTP 代理运行正常,您应该能在 cURL 响应中看到其 IP 地址。

cURL 代理最佳实践

到目前为止,您大概已经了解在 cURL 中使用代理的好处,甚至可能正打算自己动手配置一个。

然而,这只是问题的一个方面;您还必须采取额外措施,充分发挥代理在命令行工具中的优势。

我们建议您注意以下几点:

  • 了解您的代理

您需要在HTTP、HTTPS 和 SOCKS这几种 cURL 代理之间做出选择,正如前文所述,每种都各有优劣,请根据自身需求选择合适的类型。

HTTP 代理适合简单的网页浏览,而 HTTPS 代理更适用于对隐私要求较高的场景。

请选择SOCKS 代理,用于处理多种协议(HTTP 和 HTTPS 之外的协议,例如 FTP、SFTP 和 SMTP)。

  • 了解如何管理代理

如果您依赖多台代理服务器发送 cURL 命令,就必须通过动态轮换和选择 IP 地址来高效管理这些代理。

这样可以降低单个 IP 地址负载过重、被网站服务器封禁的风险。

  • 处理代理认证

如果代理服务器要求认证,请使用前文介绍的语法安全提供相关信息,您也可以借助环境变量让凭据更安全。

  • 遵守服务器规则

许多网站会限制单个 IP 可发送的并发请求数量。遵守这些规则并密切关注请求频率,尤其是在进行 Expedia 数据抓取时,这一点非常重要。

排查常见 cURL 问题

cURL 错误十分常见,遇到时不必惊慌,只需采用系统化的排查方法,就能轻松识别并解决常见问题。

具体方法如下:

  • 连接问题

连接问题通常表现为错误代码,即4xx 和 5xx。遇到这类问题时,可按以下方法处理:

1. 确认代理信息:可能是一个小的拼写错误导致的,请务必仔细检查代理服务器地址和端口。

2. 检查网络连接:检查路由器、调制解调器和网线,确保设备能够稳定接入互联网。

  • 认证问题

类似“407 Proxy Authentication Required”这样的错误代码,说明您需要提供代理凭据或凭据存在问题,可按以下方法处理:

1. 验证认证信息:检查用户名和密码等凭据是否正确。

2. 检查语法:确保 cURL 命令中的认证信息格式正确。

  • 连接速度慢

如果响应时间明显超出预期,可能是以下原因,解决方法如下:

1. 代理服务器可能请求负载过高,可尝试更换其他代理服务器,看性能是否改善。

2. 确保所用代理服务器与目标服务器之间的物理距离不会过远,否则会降低性能。

3. 确认所用代理服务器没有流量限制。

  • 频繁超时

如果 cURL 命令返回超时错误,说明服务器已处理您的请求,但未能及时响应,可尝试以下方法解决:

1. 调整超时设置,使用'connect-timeout'和'-max-time'选项。

2. 有时更好的方法是在目标服务器请求负载较低的时间段再运行该命令。

3. 更换更可靠、更稳定的代理供应商。

结语

关于在 cURL 中使用代理的介绍就到这里,现在您已经掌握了运行基本 cURL 命令,以及配置和测试 cURL 代理的方法。

借助这些代理服务器,您不会再受网络或 IP 限制,能够高效管理 cURL 请求以满足当下需求。欢迎参阅我们的代理服务器与端口指南。

常见问题

Wget 和 cURL 有什么区别?

虽然两者都是常见且稳定的命令行工具,但在几个基本方面存在差异。

cURL 用于通过不同协议向服务器发送和接收数据,而 Wget 则更专注于文件下载,尤其适合递归下载和整站镜像。

错误代码 403 是什么意思?

出现此错误说明服务器已理解您的请求,但拒绝授权,可能是因为您的代理无权访问该资源,或凭据不正确。

如何解决错误代码 407?

该错误通常表示代理需要认证凭据但未提供,解决方法是确保将正确的凭据信息传递给 cURL。

如何为 cURL 代理设置超时?

cURL 提供多个命令,可用于配置代理服务器的超时设置。

假设您想将当前阈值提高到 20 秒,可以使用以下 cURL 命令:

curl --connect-timeout 20 -x http://proxyserver:port http://example.com