阅读下面的文章,了解如何使用 cURL 发送 GET 请求、跟随重定向、自定义请求头以及使用自定义用户代理字符串等。

cURL 工具是一个开源解决方案,用于在网络服务器(和客户端)之间传输数据。它是最受欢迎的工具,据估计已安装在超过 200 亿台设备上。你可以将其作为命令行工具或嵌入库(libcurl)来使用。它几乎可以在所有设备上运行,并支持一些互联网上的热门网站,如 Instagram、YouTube、Skype、Spotify 以及热门游戏《侠盗猎车手 V》。

即便 cURL 的用途广泛,其使用始于一个 GET 请求。要学习如何使用 cURL,你首先需要学习如何发送 GET 请求以及所有相关细节,如发送 HTTP 头信息、设置用户代理字符串、使用代理、保存响应或将其传递给其他程序,以及设置超时时间等。


GET 请求的结构分析

GET 请求方法用于从 Web 服务器获取资源。它被认为是安全的,因为它不会改变服务器的状态。对于 GET 请求,其结构基本上是请求方法,具体来说,是 URI 和 HTTP 标头。

  • 方法规范:请求方法的名称为大写字母 GET。这是最流行的请求方法,在某些客户端 HTTP 库、工具和框架中,如果未指定请求方法,则使用的默认方法为 GET。cURL 也是如此,因为如果是 GET 请求,则无需指定方法。
  • URI:这代表统一资源标识符 (URI),基本上是 URL 或网址。这通常由内容路径和查询字符串组成。虽然路径是必需的,但查询字符串是可选的,用于限制和指定范围数据,例如“page=2”查询字符串。
  • HTTP 标头: HTTP 标头是需要包含在请求中的元数据。其中一些包括主机、用户代理和接受。如果你不指定这些值,则将使用默认值,该值会根据客户端软件而有所不同。

在以上所有内容中,只有 URI 是你在发送 get 请求时在 cURL 中必须指定的内容。


发送 GET 请求的基本语法

它的语法是最简单的

curl [URL]

你应该将 [URL] 占位符替换为实际的 URL,如下例所示

curl https://google.com/

如果你运行上述命令,它将获取 Google 主页的 HTTP 并将其打印在屏幕上。对于大多数用例来说,这没有帮助,因为你获取的数据要么用于使用,要么传递给另一个程序使用。要将内容保存到文件中,你可以使用以下命令。

curl -O [URL]

上面的命令将 URL 替换为实际 URL,将获取 URL 的内容并将其保存在文件中。但是,文档的名称和格式将与服务器上的原始名称和格式相同。假设它被命名为 goose.html,它将保存在本地工作目录中。要指定新名称和格式,请使用以下命令。

curl [URL] -o [NEWFILENAME]

curl https://google.com/ -o googlehomepage.html

如上所示,-O 标志已被删除,而 -o 标志已添加一个值,该值代表文件的新名称。你应该密切注意 -O 和 -o 标志,一个是小写字母,另一个是大写字母。

本节要处理的最后一件事是如何遵循网络上常见的重定向。假设你向 http://google.com/ 发送一个网络请求,这通常会在浏览器中重定向到安全版本 (https://)。但是,对于 cURL,它只会输出一个 HTML 字符串,告诉你 URL 已移动。下面是如何让它遵循重定向。

curl [URL] -o [FILENAME] -L

curl https://google.com/search -o googlehomepage.html

通过上述操作,cU​​RL 将按照重定向来获取你所需的资源。


带有查询字符串的请求

上述命令仅向域和路径发送请求。但是,它不处理发送带有参数/查询字符串的请求。如果你需要发送一个命令,以 money 作为查询从 Google 搜索中获取内容,该怎么办?

curl -G -d “key=value” [URL] 

curl -G -d “q=money”  https://google.com/search

-G 标志告诉 cURL 这是一个 GET 请求。请记住,在基本部分中我们没有指定方法。在这里,我们这样做是因为我们以“q=money”的形式发送数据,如果我们不指定,命令将作为 POST 请求发送。使用 -G 标志指定方法。

注意:对于每个查询参数,你需要指定一个 -d。也就是说,如果你有 3 个参数,你将定义一个 -d,然后指定参数及其值。


使用自定义 HTTP 标头

cURL 具有为你的 Web 请求发送的默认标头。例如,默认发送的用户代理字符串是:

curl/7.65.0(x86_64-pc-linux-gnu)libcurl/7.65.0 OpenSSL/1.1.1n zlib/1.2.11 libidn2/2.3.1 libssh2/1.8.0 nghttp2/1.48.0

以上内容会告诉 Web 服务器你正在使用 curl 客户端,以及一些其他相关详细信息,例如其版本和你使用的特定库。在某些情况下,你不想暴露真相,因为你将被阻止自动访问。相反,你可以使用以下内容自定义用户代理字符串。

curl -A “MyAppBot” https://google.com/search

MyAppBot 是你的目标网站将看到的新客户端软件。最好使用流行浏览器的用户代理字符串,因为这有助于你与人群保持融合。你可以在此处查看流行 Web 浏览器的用户代理字符串列表。

除了用户代理之外,你还可以发送其他标头的值,例如内容类型、接受等。让我们看看如何将接受标头类型设置为 JSON。

curl -H "Accept: application/json” https://google.com/search

对于其他标题,你可以使用带有 -H 标志的上述模板。


通过代理获取请求

cURL 支持代理,你可以利用它匿名发送 GET 请求。要配置代理,你需要设置 -x 标志并提供代理主机和端口。对于需要用户名和密码进行身份验证的代理,你不仅需要指定代理主机和端口,还需要指定用户名和密码。让我们看看如何实际完成此操作。

curl  -x http://[HOST]:[PORT] -O [URL]

curl  -x http://username:password@[HOST]:[PORT] -O [URL]

curl -x http://userconto:[email protected]:121 -O https://google.com/search

以上示例为设置有用户名和密码的代理。你可以轻松将其转换为无用户名和密码的代理,例如通过 IP 身份验证进行身份验证的代理或完全不需要身份验证的免费代理。


网站使用 cookie 来个性化体验、跟踪我们并让我们保持登录状态。如果你在使用 cURL 访问网络时需要维持会话,则需要维持会话,而这只能通过 cookie 来实现。cURL 确实支持使用 -b 标志的 cookie。以下是如何使用 cURL 在 get 请求中发送假设 cookie 的示例。

curl -b “sessionlds=cookievalue” -O https://google.com/search

如上所示,-b 标志后面紧接着的是键值对形式的 cookie。这将随请求一起发送。


限制请求速度

cURL 以最大速度运行,对于大多数用户来说,这没有问题。但是,如果你需要限制下载/上传速度,以避免服务器过载或以其他方式模拟较慢的网络,则可以使用 —limit-rate 标志并将限制定义为 KB、MB 或 GB。下面有一个示例供你参考。

curl -O —limit-rate 500KB https://google.com/search

以上将 500KB 定义为限制。重要的是,你要知道该限制适用于下载和上传速度。


检索 HTTP 响应标头

默认情况下,当你运行 cURL get 命令时,它只会为你提供资源的主体 — 你不会获得元数据(也称为 HTTP 响应标头)。这包含内容类型、提供的日期时间以及缓存控制和 cookie。要检索这些内容,请使用不带参数的 -i,这将与响应主体一起返回。

curl -O https://google.com/search -i

响应将保存在一个文件中,响应头详细信息添加在文件顶部。


结    论

通过以上内容,你应该能够发送包含查询字符串、Cookies、自定义头信息和用户代理的 GET 请求,并且可以跟随重定向,通过代理发送请求等。cURL 的功能远不止于此,当你将其与对 POST、PUT 和其他请求方法的支持结合起来时,你就会明白为什么 cURL 在竞争中如此受欢迎。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles