如何通过代理使用 cURL
cURL 是一款方便的命令行工具,可用于测试代理,甚至进行一些轻量级网页抓取。本指南将为您提供有效使用 cURL 和代理服务器所需的基础知识。
什么是cURL?
为什么选择 cURL?
首先,cURL 存在已久,应用广泛,并且使用简单的文本界面,在每个系统上都一样。除此之外,cURL 还非常强大。该工具可用于编写涉及身份验证、SSL 连接、代理隧道、cookie 等的复杂脚本。如果不需要,基本语法很容易掌握,因此您可以快速开始使用它进行有用的工作。
cURL 的工作原理
从最基本的意义上讲,cURL 使用以下语法:
curl [option] [url]
[选项] 指指示 cURL 执行什么操作的命令。例如, -x 告诉 cURL 连接将通过代理服务器。许多选项都有替代名称: -x,你也可以写 - 代理人。某些选项可能位于 URL 后面,例如, -v 要求 cURL 显示连接信息。选项不是语法的必需项,但大多数时候您都会使用它们。
[网址] 指的是您想要与之交互的域。
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 or - 代理人 选项来指定请求中要使用的代理:
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 代理结合使用
如果您想使用带有 SOCKS 协议的 cURL,有几种方法可以实现。您可以同时指定协议和代理 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"
然后保存文件。现在,无论何时使用 卷曲,它将默认使用指定的代理设置。
Windows配置
查找名为的 cURL 配置文件 _curlrc 在您的用户配置文件目录中。例如,位置通常为 C:\Users\我的名字\_curlrc.
如果找不到,请创建一个新的文本文件,并将其命名为 _curclrc (不要忘记删除 .txt 扩展名),然后使用文本编辑器打开它。
然后,在文件中添加代理配置:
proxy="http://username:password@127.0.0.1:80"
使用代理进行身份验证
付费提供商通常要求您进行代理身份验证,然后才能使用它们。如果您已将 IP 地址列入白名单,那就没问题。但如果您使用用户名和密码,则需要添加另一个选项,称为 -U or ‐‐代理用户:
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 or ——冗长 选项将打印出幕后发生的事情。了解如何使用此选项对于调试非常有用。
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 or - 输出 将结果写入文件的选项。
例如,下面的命令创建一个名为 输出.txt 在您的活动目录中并将响应直接打印到其中:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -o "output.txt"
高级 cURL 设置
设置标题
如果您不想让网站将您视为机器人,则需要发送适当的标头。cURL 就可以做到这一点。
要查看通常向目标网站发送的标头,请单击鼠标右键,选择 检查,然后导航到 网络 选项卡。刷新网站,您将看到加载时发出的所有请求。
专家提示: 您可以右键单击该请求并将其复制为 cURL 命令,以便更好地查看它。
那么,如何在 cURL 中设置这些标头呢?使用 -H or ‐‐header 选项。例如,我们可以发送一个 接受 目标网站的标头:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -H "Accept: text/html"
添加用户代理
默认情况下,cURL 会向网站宣布自己是……好吧,cURL。有时我们不希望这样——再次强调,是为了防止被视为机器人并被屏蔽。cURL 允许我们使用以下选项来欺骗我们的用户代理 -A or - 用户代理:
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
也可以使用以下方式在标头中发送 User-Agent: -H 选项:
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 可帮助网站记住您的信息,有时它们对于网站正常运行必不可少。如果您需要它们,您可以使用 -b or - 曲奇饼 指定 cookie 或应从中读取的文件的选项。
例如,如果有一个活动会话,并且您需要随请求发送其 ID 的“sess_id”cookie,则可以使用:
curl -x< http://username:password@us.proxyendpoint.com:20000 example.com -v -b ‘sess_id=qwerty123’
还可以从目标服务器接收 cookie 并存储以供日后使用。cURL 具有 -c or - 饼干罐 允许指定输出文件的选项:
curl example.com -c “cookies.txt”
然后,您可以从文件中读取这些 cookie,并将它们用于后续的请求 -b 命令:
curl example.com -b “cookies.txt”
跟随重定向
有时,你可能会遇到一个问题,输出只是说 发现 or 找到了。重定向至 https://somewhere.com。 在这种情况下,您会看到 HTTP 代码 302 在详细输出中。
这个问题很容易解决:只需添加 -L or - 地点 请求选项:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -L
忽略 SSL 证书错误
有时目标网站会使用自签名或过期的证书。您将收到 SSL证书 错误:无效的证书链 尝试访问时出现错误。
cURL 可以通过添加以下代码来忽略 SSL 证书错误: -k or -不安全 选项:
curl -x http://username:password@us.proxyendpoint.com:20000 ipinfo.io -v -k
忽略或覆盖代理
如果您想忽略或覆盖一个请求的代理,您可以通过设置新的代理或完全绕过它来实现。
要覆盖代理,请使用 -x or -代理人 开关:
curl --proxy "http://username:password@127.0.0.1:80" "https://example.com"
如果要完全忽略某个请求的代理,请使用 无代理 用命令 “*” 符号。 “*” 指示 curl 绕过整个请求的代理。
curl --noproxy "*" "https://example.com"
使用 POST 请求发送数据
cURL 允许向 Web 服务器发送 POST 请求,而不仅仅是获取数据。这样,您就可以填写表单、登录以及以其他方式与网站互动。为此,请使用 -X or - 要求 选项:
curl -X POST https://example.com
要指定要发送的数据,您还需要 -d or - 数据 选项。
将值发送到特定变量:
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"}'
注: 有时,您可能需要使用反斜杠字符 (\)。转义后的 JSON 如下所示:
curl -x POST https://example.com -d '{\"name\" : \"John\", \"last_name\" : \"Doe\"}'
结语
至此,我完成了关于使用 cURL 和代理服务器的简短介绍。希望这对您有所帮助。现在开始使用 curl 代理吧!
有关将 cURL 与代理服务器结合使用的常见问题解答
默认情况下,cURL 使用 TCP。
是的,您可以免费下载和使用 cURL。
是的,你可以。cURL 具有 -U 用户名和密码验证的选项。
当然。cURL 支持普通的 HTTP,并且您可以将其配置为忽略 SSL 错误。
只需输入 卷曲 ipinfo.io 进入终端,它将显示您当前的 IP 地址。