返回博客

如何进行 cURL 代理设置?

Iveta Vistorskyte

2022-05-272 min read

在这篇文章中,我们会一步一步详细说明,如何设置使用 cURL 代理服务器。我们会分别讲解在各种系统中如何安装和设置代理,包括什么是cURL,如何为cURL 配置代理。

这是一份通用教程,适用于 cURL 代理服务器(所有代理服务器)的设置。您只需了解代理服务器的详细信息和登录凭证即可。

教程技术性略强,预期读者能够具备代理基础知识。对于希望开展网页抓取业务的朋友来说,这应当是相当实用有趣的资料。

cURL 的定义

cURL 是通过 URL 发送和接收数据的命令行工具。首先我们来举个最简单的例子,帮助了解如何使用 curl。打开终端或命令提示符程序,输入以下命令后按回车键(Enter):

curl https://www.baidu.com

这时会调出 HTML 页面并在控制台上将其打印。

curl https://www.baidu.com -I

这时会打印文档信息。

HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1

您可以浏览我们之前写过的一篇文章cURL 是什么,了解这款工具为什么这么受欢迎。

安装步骤

许多 Linux 系统和 macOS 中都已预装 cURL。现在 Windows10 系统中也已配备。

如果您的 Linux 系统中没有 cURL,运行安装指令即可安装。如果是在 Ubuntu 上,打开终端运行以下指令:

sudo apt install curl

如果您用的是早期版本的 Windows,或者想要安装不同版本,请从官网下载页面下载 cURL 以安装。

连接代理所需信息

不管您使用的是哪家的代理服务,都需要提供以下信息:

●        代理服务器地址

●        端口

●        协议

●        用户名(用于验证身份)

●        密码(用于验证身份)

在这里,我们假定使用以下信息:代理服务器 127.0.0.1,端口 1234,用户名 user,密码 pwd。  我们接下来会举例介绍各种协议下的设置情况。

友情提示:如果您使用的网络需要 NTLM 身份验证,那么运行 cURL 时可以使用 –proxy-ntlm。同样,–proxy-digest 也可用于摘要身份验证运行 curl –help 即可查看所有选项。在下文中,我们会举例说明需要提供用户名和密码的情形。

首先,我们举例说明的第一个 cULR 代理情形是在 cURL 中最常用的 HTTP 和 HTTPS 代理。

如何使用带 HTTP/HTTPS 代理的 cURL

还记得吗,我们没有代理的时候,是这样使用 uCRL的:

curl https://httpbin.org/ip

这个网站用来测试代理很方便,此页面会显示原始 IP 地址。正常使用代理后,此页面返回的则不再是您的原始 IP 地址,而是代理的 IP 地址。

在代理与 cURL 并用的时候可以通过不同方式来运行 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 代理或 curl https 代理)

另一种 curl 设置代理的方法是通过对环境变量 http_proxy and 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 配置文件来为 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 文件并更新外壳以读取该文件。因此,在终端内运行以下命令:

. ~/.bashrc

无论什么时候要快速打开/关闭代理,现在只需运行一个或多个 curl 命令即可立刻做到,方法就是运行以下命令行:

proxyon
curl "http://httpbin.org/ip"
curl "http://baidu.com"
proxyoff 

cURL socks 代理(包括 curl socks5 代理)

对于使用 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 程序都用它来进行网页抓取,是相关业务中不可或缺的利器。 

点击这里查看 GitHub 上的存储库,以了解本文使用的完整代码。如果您觉得这篇文章有用,您可能也会喜欢我们关于反向与正向代理网页解锁器的博文。

关于作者

Iveta Vistorskyte

内容经理

Iveta Vistorskyte 在 Oxylabs 担任一名内容经理。作为一名作家和挑战者,她决定进军技术领域,并立即对这个领域产生了兴趣。当她不工作时,您可能会发现她只是在听她最喜欢的音乐或与朋友们玩棋盘游戏来放松身心。

Oxylabs博客上的所有信息均按“原样”提供,仅供参考。对于您使用Oxylabs博客中包含的任何信息或其中可能链接的任何第三方网站中包含的任何信息,我们不作任何陈述,亦不承担任何责任。在从事任何类型的抓取活动之前,请咨询您的法律顾问,并仔细阅读特定网站的服务条款或取得抓取许可。

在这篇文章


  • cURL 的定义

  • 安装步骤

  • 连接代理所需信息

  • 如何使用带 HTTP/HTTPS 代理的 cURL

  • 在 cURL 中如何设置代理命令行参数

  • 通过环境变量进行设置(curl http 代理或 curl https 代理)

  • 始终使用代理时如何配置 cURL

  • 忽略或撤销单个请求的代理

  • 高级技巧 – 快速开/关代理

  • cURL socks 代理(包括 curl socks5 代理)

  • 总结

选择Oxylabs®,业务更上一层楼


隐私政策

oxylabs.cn© 2024 保留所有权利©