如何配合代理使用cURL?

配合代理使用cURL

本文将分步骤介绍如何配合代理服务器使用cURL或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与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而不是其他程序配合代理使用,则可以通过创建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

cURL Socks代理

如果代理服务器使用的是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教程)来体验更多有关网络抓取的乐趣。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值