如何通过代理使用 cURL
cURL 是一款方便的命令行工具,可用于测试代理,甚至进行一些轻量级网页抓取。本指南将为您提供有效使用 cURL 和代理服务器所需的基础知识。
什么是cURL?
为什么选择 cURL?
首先,cURL 存在已久,应用广泛,并且使用简单的文本界面,在每个系统上都一样。除此之外,cURL 还非常强大。该工具可用于编写涉及身份验证、SSL 连接、代理隧道、cookie 等的复杂脚本。如果不需要,基本语法很容易掌握,因此您可以快速开始使用它进行有用的工作。
cURL 的工作原理
从最基本的意义上讲,cURL 使用以下语法:
curl [option] [url]
[选项]指的是告诉 cURL 执行什么操作的命令。例如,-x告诉 cURL 连接将通过代理服务器。许多选项都有别名:除了-x,您还可以写成--proxy。有些选项可以放在 URL 之后,例如-v会要求 cURL 显示连接信息。选项并非语法必需,但您大多数情况下都会用到它们。
[url]指的是您要与之交互的域名。
cURL 支持哪些协议?
cURL 支持超过 20 种协议,足以满足所有代理服务器的使用场景。这些协议包括 HTTP、HTTPS、SOCKS、POP3、SMTP、IMAP 以及许多其他您可能用不到的协议。如果您未在 URL 中指定协议,cURL 将默认使用 HTTP 协议,因为默认代理协议是 HTTP。
我有 cURL 吗?
如何将 cURL 与代理服务器结合使用
好了,既然你已经了解了cURL 代理是什么,并且已经把它安装在你的电脑上了,那么让我们看看我们能用它做什么。
检查你的 IP 地址
如果您已在操作系统上设置了代理服务器,则可以通过运行以下命令快速检查您的 IP 地址和位置:
curl ipinfo.io
示例响应:
{
"ip": "45.152.180.180",
"city": "New York City",
"region": "New York",
"country": "US",
"loc": "40.7143,-74.0060",
"org": "AS9009 M247 Ltd",
"postal": "10004",
"timezone": "America/New_York",
"readme": "https://ipinfo.io/missingauth"
}
检查你的代理服务器
当然,你通常不会需要在操作系统级别设置代理。因此,你可以使用其他方法测试代理是否正常工作。cURL 提供了`-x`或`--proxy`选项,用于指定请求中将要使用的代理:
curl -x 127.0.0.1:80 ipinfo.io
or
curl --proxy 127.0.0.1:80 ipinfo.io
在这个例子中,127.0.0.1是代理服务器的 IP 地址,80是端口号。
您还可以使用域名来代替 IP 地址:
curl -x http://us.proxyendpoint.com:20000 ipinfo.io
将 cURL 与 HTTP/HTTPS 代理结合使用
大多数提供 HTTPS 代理的提供商都允许您通过 HTTP 连接到代理服务器,然后与网站建立 HTTPS 连接。因此,无论您连接到 HTTP 还是 HTTPS 代理服务器,您的 cURL 命令都应该相同。
在某些情况下,您需要 cURL HTTPS,因此只需在 HTTP 中添加“s”即可。但请注意,首先,您必须创建 cURL。
curl https:/proxyway.com
只有当你创建包含代理配置的 curlrc 文件时,它才会生效。之后,它将被设置为默认代理。
将 cURL 与 SOCKS 代理结合使用
如果你想使用 cURL 的 SOCKS 协议,有几种方法可以实现。你可以同时指定协议和代理 IP 地址。或者,你可以添加socks5://或使用--socks5选项代替-x选项。
curl -x socks5://127.0.0.1:80 ipinfo.io
curl --socks5 127.0.0.1:80 ipinfo.io
要求 cURL 始终使用代理
您可以通过使用或创建配置文件将 cURL 配置为始终需要代理。
Linux/macOS 配置
打开终端并导航到您的用户主目录。运行以下命令检查~/.curlrc文件是否存在:
ls -a ~ | grep .curlrc
如果文件存在,则会列出。但是,如果不存在,您可以创建一个新文件:
touch ~/.curlrc
找到或者创建一个新文件后,打开它,并添加代理配置:
proxy="http://username:password@127.0.0.1:80"
然后保存文件。现在,每次使用curl 命令时,它都会默认使用指定的代理设置。
Windows配置
在用户配置文件目录中查找名为_curlrc的 cURL 配置文件。例如,其位置通常为C:\Users\MyName\_curlrc 。
如果找不到,请创建一个新的文本文件,命名为_curclrc(不要忘记删除 .txt 扩展名),然后使用文本编辑器打开它。
然后,在文件中添加代理配置:
proxy="http://username:password@127.0.0.1:80"
使用代理进行身份验证
付费服务商通常要求在使用前进行代理身份验证。如果您已将 IP 地址加入白名单,那就没问题。但如果您使用用户名和密码,则需要添加一个名为-U或--proxy-user 的选项:
curl -U username:password -x us.proxyendpoint.com:20000 ipinfo.io
也可以将用户名和密码与代理本身一起传递:
curl -x http://username:password@127.0.0.1:80 ipinfo.io
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io
使用环境变量
在 macOS 和 Linux 中,您还可以通过设置环境变量将代理与 cURL 结合使用。请记住,它为整个系统设置代理,而不仅仅是为 cURL 设置代理。环境变量可让您自定义操作系统的工作方式以及该系统上的应用程序。
您可以通过一行中的环境变量告诉 cURL 使用代理。
export MY_NEW_VAR="My New Var"
另一种方法是使用http_proxy环境变量。您可以使用 export 命令来设置该变量。
export http_proxy=http://127.0.0.1:8080
此外,您还可以指定代理变量,这样就无需每次都添加 cURL 选项。您还可以使用相同的方式取消全局代理设置。
http_proxy=http://127.0.0.1:8080
虽然上述方法有效,但您也可以使用~/ .curlrc文件。这是一个默认选项,因此 cURL 始终会在您的主目录中查找此类文件。在 Linux 和 macOS 上,它会查找~/.curlrc文件,而在 Windows 上,它会查找_curlrc文件。
与环境变量不同,使用 .curlrc 文件,您可以专门为 cURL 设置代理,而不是为所有程序设置代理。这可以通过将以下行添加到~/.curlrc文件来实现。
proxy=http://127.0.0.1:8080
如果~/.curlrc文件不存在,您可以创建一个新文件。
了解后台发生的情况
您可能需要了解发送请求时发生的情况。例如,您可能对请求或响应头、响应代码或您发送的用户代理感兴趣。添加 ` -v`或`--verbose`选项会打印出后台发生的情况。了解如何使用此选项对于调试非常有用。
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v
* Rebuilt URL to: ipinfo.io/
* Trying 51.161.68.240...
* TCP_NODELAY set
* Connected to us.proxyendpoint.com (127.0.0.1) port 20000 (#0) < We see that the proxy server and port are reachable
* Proxy auth using Basic with user 'username'
> GET http://ipinfo.io/ HTTP/1.1
> Host: ipinfo.io
> Proxy-Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= < Header containing your username and password encoded in Base64
> User-Agent: curl/7.55.1 < This is how the web server sees the requester. Any server would know that cURL is used to access it unless the User-Agent is changed
> Accept: */*
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 OK < Response code
< content-length: 325
< access-control-allow-origin: *
< content-type: application/json; charset=utf-8
< date: Thu, 29 Jul 2021 09:22:32 GMT
< referrer-policy: strict-origin-when-cross-origin
< via: 1.1 google
< x-content-type-options: nosniff
< x-envoy-upstream-service-time: 2
< x-frame-options: DENY
< x-xss-protection: 1; mode=block
将结果保存到文件
如果您想保存日志(以便分析日志或批评代理提供商的不正常工作),可以使用-o或--output选项将结果写入文件。
例如,以下命令会在您的活动目录中创建一个名为output.txt的新文件,并将响应直接打印到该文件中:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -o "output.txt"
高级 cURL 设置
设置标题
如果您不想让网站将您视为机器人,则需要发送适当的标头。cURL 就可以做到这一点。
要查看通常发送到目标网站的标头,请单击鼠标右键,选择“检查”,然后导航到“网络”选项卡。刷新网站,您将看到网站加载期间发出的所有请求。
专业提示:您可以右键单击请求并将其复制为 cURL 命令,以便更好地查看它。
那么,如何在 cURL 中设置这些请求头呢?使用-H或--header选项。例如,我们可以向目标站点发送Accept请求头:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -H "Accept: text/html"
添加用户代理
默认情况下,cURL 会向网站声明自己是……cURL。但有时我们不希望这样——同样是为了避免被当作机器人程序屏蔽。cURL 允许我们使用`-A`或`--user-agent` 选项来伪造用户代理:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
详细输出让我们看到用户代理已经改变:
> 用户代理:Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
也可以使用-H选项在标头中发送 User-Agent:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
添加 Cookies
Cookie 可以帮助网站记住您的信息,有时它们对于网站的正常运行至关重要。如果您需要使用 Cookie,可以使用`-b`或`--cookie`选项来指定 Cookie 或读取 Cookie 的文件。
例如,如果有一个活动会话,并且您需要随请求发送其 ID 的“sess_id”cookie,则可以使用:
curl -x< http://username:password@us.proxyendpoint.com:20000 example.com -v -b ‘sess_id=qwerty123’
还可以从目标服务器接收 cookie 并将其存储以供后续使用。cURL 具有-c或--cookie-jar选项,允许指定输出文件:
curl example.com -c “cookies.txt”
然后,您可以从文件中读取这些 cookie,并使用-b命令将它们用于后续请求:
curl example.com -b “cookies.txt”
跟随重定向
有时,您可能会遇到输出仅显示“找到”或“找到。正在重定向到 https://somewhere.com”的问题。在这种情况下,您会在详细输出中看到 HTTP 状态码302 。
这个问题很容易解决:只需在请求中添加-L或--location选项即可:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -L
忽略 SSL 证书错误
有时目标网站可能会使用自签名证书或已过期的证书。尝试访问时,您会收到“SSL证书错误:无效的证书链”错误。
cURL 可以通过添加-k或--insecure选项来忽略 SSL 证书错误:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -k
忽略或覆盖代理
如果您想忽略或覆盖一个请求的代理,您可以通过设置新的代理或完全绕过它来实现。
要覆盖代理设置,请使用-x或--proxy开关:
curl --proxy "http://username:password@127.0.0.1:80" "https://example.com"
如果想完全忽略代理,请使用带有“*”符号的noproxy命令。“*”指示 curl 对整个请求绕过代理。
curl --noproxy "*" "https://example.com"
使用 POST 请求发送数据
cURL 允许向 Web 服务器发送 POST 请求,而不仅仅是获取数据。这样,您就可以填写表单、登录以及与网站进行其他交互。要执行此操作,请使用-X或--request选项:
curl -X POST https://example.com
要指定要发送的数据,还需要-d或--data选项。
将值发送到特定变量:
curl -X POST https://example.com -d "name=John%last_name=Doe"
发送 JSON 格式的数据:
curl -x POST https://example.com -d '{"name" : "John", "last_name" : "Doe"}'
注意:有时,您可能需要使用反斜杠字符 ( \ ) 转义特定字符(在 Windows 系统中更为常见)。转义后的 JSON 如下所示:
curl -x POST https://example.com -d '{\"name\" : \"John\", \"last_name\" : \"Doe\"}'
结语
至此,我完成了关于使用 cURL 和代理服务器的简短介绍。希望这对您有所帮助。现在开始使用 curl 代理吧!
有关将 cURL 与代理服务器结合使用的常见问题解答
默认情况下,cURL 使用 TCP。
是的,您可以免费下载和使用 cURL。
是的,可以。cURL 提供了-U选项,用于用户名和密码验证。
当然。cURL 支持普通的 HTTP,并且您可以将其配置为忽略 SSL 错误。
只需在终端中输入curl ipinfo.io,即可显示您当前的 IP 地址。