介绍
欢迎来到 Linux URL 数据传输实验。在这个实验中,你将学习如何在 Linux 系统中使用 URL 传输数据。这对于系统管理员、开发人员和安全专家来说是一项基本技能。
我们将学习的主要工具是 curl,它是一个强大的命令行工具,用于使用 URL 语法传输数据。你将学习如何从网站检索数据、将内容保存到文件、使用不同的 HTTP 方法,以及通过各种选项自定义你的请求。
在本实验结束时,你将获得在实际场景中常用的基本数据传输技术的实践经验。
欢迎来到 Linux URL 数据传输实验。在这个实验中,你将学习如何在 Linux 系统中使用 URL 传输数据。这对于系统管理员、开发人员和安全专家来说是一项基本技能。
我们将学习的主要工具是 curl,它是一个强大的命令行工具,用于使用 URL 语法传输数据。你将学习如何从网站检索数据、将内容保存到文件、使用不同的 HTTP 方法,以及通过各种选项自定义你的请求。
在本实验结束时,你将获得在实际场景中常用的基本数据传输技术的实践经验。
curl 是一个使用 URL 语法传输数据的命令行工具。它支持众多协议,包括 HTTP、HTTPS、FTP 等等。在这一步,你将学习使用 curl 检索网页内容的基本用法。
让我们从打开终端开始。终端应该已经位于 /home/labex/project 目录。如果不是,你可以使用以下命令切换到该目录:
cd ~/project
让我们开始使用 curl 从网站检索内容。输入以下命令:
curl http://example.com
运行此命令后,你应该会在终端中看到 example.com 的 HTML 内容。这个输出包含 HTML 标签和网页的所有内容。输出应该类似于以下内容:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents...</p>
...
</div>
</body>
</html>
这展示了 curl 最基本的用法——检索 URL 的内容并直接在终端中显示。
你看到的输出是服务器返回的原始 HTML 响应。当你使用浏览器访问网站时,浏览器会解释这个 HTML 并将其渲染为格式化的网页。然而,curl 只是向你展示原始内容。
让我们尝试另一个示例,看看不同的内容。运行:
curl https://httpbin.org/json
这次,你应该会看到一个 JSON 响应。输出应该如下所示:
{
"slideshow": {
"author": "Yours Truly",
"date": "date of publication",
"slides": [
{
"title": "Wake up to WonderWidgets!",
"type": "all"
},
{
"items": [
"Why <em>WonderWidgets</em> are great",
"Who <em>buys</em> WonderWidgets"
],
"title": "Overview",
"type": "all"
}
],
"title": "Sample Slide Show"
}
}
如你所见,curl 可以根据服务器提供的内容检索不同类型的数据。
在很多情况下,你可能希望保存检索到的内容,而不仅仅是在终端中查看。在这一步,你将学习如何将 curl 的输出保存到文件中。
保存 curl 命令输出最简单的方法是使用 > 操作符进行重定向。运行以下命令:
curl http://example.com > example.html
此命令从 example.com 检索内容,并将其保存到当前目录下名为 example.html 的文件中。要验证文件是否已创建,请运行:
ls -l example.html
你应该会看到列出的文件及其大小和其他详细信息。
要查看文件的内容,你可以使用 cat 命令:
cat example.html
你应该会看到与之前在终端中显示的相同的 HTML 内容。
curl 提供了一个特定的选项 -o(或 --output),用于将检索到的内容保存到文件中。当输出重定向可能会导致问题时,这个选项特别有用。让我们试试看:
curl -o httpbin_data.json https://httpbin.org/json
此命令将来自 httpbin.org 的 JSON 数据保存到名为 httpbin_data.json 的文件中。使用以下命令验证文件是否已创建:
ls -l httpbin_data.json
并使用以下命令查看其内容:
cat httpbin_data.json
整理文件是个好习惯。让我们创建一个专用的数据目录(如果它还不存在),并将一些内容保存到那里:
mkdir -p data
curl -o data/google_data.txt http://www.google.com
mkdir -p 命令会在 data 目录不存在时创建它。-p 标志确保如果目录已经存在,不会报告错误。
现在,验证文件是否已在数据目录中创建:
ls -l data/google_data.txt
你应该会看到列出的文件及其详细信息。
curl 提供了许多选项,让你可以自定义请求。在这一步,你将了解一些最有用的选项。
-v(或 --verbose)选项会让 curl 显示关于请求和响应的详细信息。这在调试时特别有用。运行以下命令:
curl -v http://example.com
你应该会看到很多信息,包括:
输出会类似于以下内容(尽管有些细节会有所不同):
* Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Age: 578793
< Cache-Control: max-age=604800
< Content-Type: text/html; charset=UTF-8
< Date: Tue, 26 Dec 2023 13:45:32 GMT
< Etag: "3147526947+ident"
< Expires: Tue, 02 Jan 2024 13:45:32 GMT
< Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
< Server: ECS (dcb/7F83)
< Vary: Accept-Encoding
< X-Cache: HIT
< Content-Length: 1256
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
...
以 * 开头的行是 curl 自身的信息性消息。
以 > 开头的行是请求头。
以 < 开头的行是响应头。
实际内容紧跟在响应头之后。
有时你需要在请求中发送特定的请求头。你可以使用 -H(或 --header)选项来实现。让我们尝试设置一个自定义的 User-Agent:
curl -H "User-Agent: MyCustomClient/1.0" https://httpbin.org/user-agent
这个命令会向 httpbin.org 发送一个带有自定义 User-Agent 请求头的请求。响应应该会确认接收到了你的自定义 User-Agent:
{
"user-agent": "MyCustomClient/1.0"
}
默认情况下,curl 不会跟随 HTTP 重定向。你可以使用 -L(或 --location)选项让它跟随重定向。让我们试试看:
curl -L http://github.com
如果没有 -L 选项,你只会得到一个重定向响应。使用 -L 选项后,curl 会跟随重定向并显示最终目标的内容。
让我们在数据目录中创建一个文件,来练习使用这些选项:
curl -v -L -o data/redirect_example.txt http://github.com
这个命令:
-v)-L)data/redirect_example.txt验证文件是否已创建:
ls -l data/redirect_example.txt
你应该会看到列出的文件及其详细信息。
curl 除了默认的 GET 方法外,还支持各种 HTTP 方法。在这一步,你将学习如何使用不同的 HTTP 方法,并在请求中发送数据。
POST 方法通常用于向服务器提交数据。你可以使用 -X 选项指定 HTTP 方法,使用 -d 选项提供数据。让我们试试看:
curl -X POST -d "name=John&age=25" https://httpbin.org/post
这个命令会向 httpbin.org 发送一个包含表单数据的 POST 请求。响应应该会回显你发送的数据:
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "25",
"name": "John"
},
"headers": {
"Accept": "*/*",
"Content-Length": "16",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": null,
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
要发送 JSON 数据,你需要指定 Content-Type 请求头。运行以下命令:
curl -X POST -H "Content-Type: application/json" -d '{"name":"John","age":25}' https://httpbin.org/post
响应应该会包含你发送的 JSON 数据:
{
"args": {},
"data": "{\"name\":\"John\",\"age\":25}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "24",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-65b..."
},
"json": {
"age": 25,
"name": "John"
},
"origin": "your-ip-address",
"url": "https://httpbin.org/post"
}
curl 支持所有标准的 HTTP 方法。让我们尝试一个 PUT 请求:
curl -X PUT -d "data=example" https://httpbin.org/put
你也可以尝试一个 DELETE 请求:
curl -X DELETE https://httpbin.org/delete
这些命令中的每一个都会返回一个显示请求详细信息的响应。
让我们将一个 POST 请求的输出保存到一个文件中:
curl -X POST -d "name=John&age=25" -o data/post_response.json https://httpbin.org/post
验证文件是否已创建:
ls -l data/post_response.json
并查看其内容:
cat data/post_response.json
你应该会看到来自 httpbin.org 的 JSON 响应,类似于前面展示的内容。
curl 非常适合从互联网下载文件。在这一步,你将学习如何下载文件并监控下载进度。
要下载文件,你可以使用之前学过的 -o 选项。让我们下载一张示例图片:
curl -o data/sample.jpg https://httpbin.org/image/jpeg
这个命令从 httpbin.org 下载一张 JPEG 图片,并将其保存为 sample.jpg 到 data 目录中。
验证文件是否已下载:
ls -l data/sample.jpg
对于较大的文件下载,查看下载进度很有用。你可以使用 -# 选项来显示进度条:
curl -## -o data/sample_with_progress.jpg https://httpbin.org/image/jpeg
你应该会看到类似这样的进度条:
######################################################################### 100.0%
如果你想使用与远程文件相同的文件名,可以使用 -O(大写的 O)选项:
cd data
curl -O https://httpbin.org/image/jpeg
cd ..
这会下载文件并将其保存为 jpeg(URL 的最后一部分)到 data 目录中。
验证文件是否已下载:
ls -l data/jpeg
如果下载中断,你可以使用 -C - 选项来恢复下载:
curl -C - -o data/resume_example.jpg https://httpbin.org/image/jpeg
这会告诉 curl 自动确定从哪里恢复下载。
你可以使用 --limit-rate 选项来限制下载速度:
curl --limit-rate 100K -o data/rate_limited.jpg https://httpbin.org/image/jpeg
这会将下载速度限制为 100 KB/s。
你可以使用一条命令下载多个文件:
curl -o data/image1.jpg https://httpbin.org/image/jpeg -o data/image2.png https://httpbin.org/image/png
这会下载一张 JPEG 图片和一张 PNG 图片,并分别将它们保存为 image1.jpg 和 image2.png。
验证两个文件是否都已下载:
ls -l data/image1.jpg data/image2.png
在这个实验中,你学习了如何使用 curl 这个强大的命令行工具来通过 URL 传输数据。你现在已经具备以下方面的实践经验:
curl 检索网页内容的基本用法-o 选项将 curl 的输出保存到文件curl 选项,如详细模式 (-v)、自定义请求头 (-H) 和跟随重定向 (-L)这些技能对于系统管理、Web 开发、API 测试和自动化脚本等许多任务来说都是必不可少的。curl 命令在各个技术领域都被广泛使用,并且几乎在所有的 Linux 发行版、macOS 甚至 Windows 上都可以使用。
当你继续在 Linux 和网络领域探索时,请记住,curl 还有比本实验中所涵盖的更多的选项和功能。你随时可以参考 curl 手册 (man curl) 以获取更多信息。