赞
踩
本文将分步骤介绍如何配合代理服务器使用cURL或curl。从安装到设置代理的各种选项,面面俱到。
本教程适用于所有代理服务器。您只需要知道服务器详细信息和凭据即可。
这是一门技术性很强的教程,希望读者能对代理是什么有一个基本的了解。对于那些从网络抓取开始学习的人来说,这将是特别有趣和有用的一门教程。
cURL是用于使用url发送和接收数据的命令行工具。让我们看一下使用curl的最简单的例子。打开terminal或命令提示符,然后键入以下命令,然后按Enter:
curl https://www.google.com
这将获取页面的HTML并将其打印在控制台上。
curl https://www.google.com -I
这将打印文档信息。
HTTP/1.1 200 OK Content-Type:text/html; charset=ISO-8859-1
之前我们写过一篇文章:“什么是cURL?” 大家在阅读本文前也可以先看下,这样对cURL会有一个更清晰的认识。以下我们回归正题,给大家讲讲配合代理使用的步骤。
许多Linux发行版和MacOS都提供了cURL。现在Windows 10也都提供了cURL。
如果Linux里没有提供cURL:可以通过运行install命令来进行安装。例如,在Ubuntu上,打开Terminal并运行以下命令:
sudo apt install curl
如果您正在运行Windows的旧版本,或者要安装备用版本:可以从官方下载页面下载curl 。 官方下载页面: https://curl.se/download.html
无论使用哪种代理服务,您都需要以下信息才能使用:
代理服务器地址
端口
协议
用户名(如果需要进行身份验证)
密码(如果需要进行身份验证)
在本教程中,我们假设代理服务器为127.0.0.1,端口为1234,用户名为user,密码为pwd。我们将列举涵盖各种协议的多个例子。
注意:如果您在使用NTLM身份验证的网络,则可以在运行curl时使用–proxy-ntlm开关。同样,–proxy-digest可用于摘要身份验证。您可以通过运行curl –help查看所有可用选项。本教程将为需要指定用户名和密码的情况进行举例说明。
下一部分将介绍第一个curl代理场景,这恰好是最常见的场景-——配合curl使用的HTTP和HTTPS代理。
如果您还记得的话,我们研究了如何在不使用代理的情况下使用curl,例如:
curl https://httpbin.org/ip
这个特定的网站对于测试代理服务器特别有用,因为此页面的输出是原始IP地址。如果正确使用了代理,则页面将返回与您的计算机不同的IP地址,即代理的IP地址。
有多种使用proxy命令运行curl的方法。下一部分将介绍如何将代理详细信息作为命令行参数发送。
注意:所有命令行选项或开关均区分大小写。例如,-f指示curl静默失败,而-F指示要提交的表单。
在cURL中设置代理的命令行参数
打开terminal并输入以下命令,然后按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与proxy一起使用的另一种方法是设置环境变量http_proxy和https_proxy。
请注意,使用环境变量设置代理仅适用于MacOS和Linux。对于Windows,请参阅下一部分,下一部分将说明如何使用_curlrc文件。
大家可以看一下这些变量名的第一部分,它清楚地显示将使用这些代理的协议。它与用于代理服务器本身的协议无关。
http_proxy –代理将用于访问使用http协议的地址
https_proxy –代理将用于访问使用https协议的地址
只需将变量http_proxy设置为http代理地址,并将https_proxy设置为https代理地址。打开terminal并运行这两个命令。
- 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配置文件(地址:https://everything.curl.dev/cmdline/cmdline-configfile)来实现。
对于Linux和MacOS,打开terminal并引导到您的主目录。如果已经有一个.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 \ <您的用户> \ 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。为此,请在terminal中运行以下命令:
. ~/.bashrc
现在,无论何时需要打开代理,都可以随时快速打开代理,运行一个或多个curl命令,然后关闭代理,如下所示:
proxyon curl "http://httpbin.org/ip" curl "http://google.com" proxyoff
如果代理服务器使用的是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配合得很好,因此许多网络应用程序都将其用于网络抓取项目,这使其成为任何网络抓取工具的必备工具。
您可以使用Selenium和其他一些有用的库(例如Beautiful Soup或lxml教程)来体验更多有关网络抓取的乐趣。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。