Linux curl命令介绍
curl是一个用来传输数据的命令行工具,它支持多种协议,如HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP, POP3, IMAP, SMTP, RTMP, RTSP等。curl可以用来发送或接收文件,执行API请求,测试网站性能,模拟用户行为等。curl的全称是Client URL,意思是客户端的统一资源定位符。
Linux curl命令适用的Linux版本
curl命令在大多数Linux发行版中都是默认安装的,你可以用curl --version
命令来查看你的系统中的curl版本和支持的协议。如果你的系统中没有curl命令,你可以用以下命令来安装:
- 在基于Debian的系统中,如Ubuntu,你可以用
sudo apt install curl
命令来安装。 - 在基于Red Hat的系统中,如CentOS,你可以用
sudo yum install curl
命令来安装。注意,如果你的系统是CentOS 8,你需要用sudo dnf install curl
命令来安装,因为CentOS 8使用了新的包管理工具dnf。 - 在基于Arch的系统中,如Manjaro,你可以用
sudo pacman -S curl
命令来安装。
安装完成后,你可以用curl --help
命令来查看curl的用法和选项。
Linux curl命令的基本语法
curl命令的基本语法是:
curl [options] [URL...]
其中,options是可选的参数,用来指定curl的行为和输出。URL是要传输数据的网址,可以是一个或多个。如果没有指定URL,curl会从标准输入中读取数据。
Linux curl命令的常用选项或参数说明
curl命令有很多选项,可以用来控制curl的行为和输出。以下是一些常用的选项:
选项 | 说明 |
---|---|
-A, --user-agent | 设置用户代理字符串,用来模拟不同的浏览器或设备 |
-b, --cookie <name=data> | 发送cookie数据,可以是一个或多个,用分号分隔 |
-c, --cookie-jar | 保存接收到的cookie数据到指定的文件中 |
-d, --data | 发送POST请求,附带指定的数据,可以是一个或多个,用&分隔 |
-F, --form <name=content> | 发送multipart/form-data类型的POST请求,附带指定的表单数据,可以是一个或多个 |
-G, --get | 将数据附加到URL后面,发送GET请求 |
-H, --header | 设置请求头,可以是一个或多个 |
-I, --head | 只显示响应头,不显示响应体 |
-i, --include | 在输出中包含响应头 |
-L, --location | 如果服务器返回3xx状态码,自动跟随重定向的URL |
-o, --output | 将输出保存到指定的文件中,而不是显示在屏幕上 |
-O, --remote-name | 将输出保存到一个文件中,文件名由URL的最后一部分决定 |
-s, --silent | 不显示错误和进度信息 |
-u, --user user:password | 设置用户名和密码,用来进行身份验证 |
-v, --verbose | 显示详细的信息,包括请求和响应的头和体 |
-X, --request | 设置请求的方法,如GET, POST, PUT, DELETE等 |
Linux curl命令的实例
以下是一些使用curl命令的实例,你可以根据你的需要来修改和尝试。
实例1:获取网页的源代码
如果你只输入一个URL,curl会默认发送GET请求,并显示网页的源代码。例如:
[linux@bashcommandnotfound.cn ~]$ curl https://www.bing.com
<!DOCTYPE html>
<html lang="zh" dir="ltr" data-bm="200">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="referrer" content="origin-when-cross-origin" />
<meta name="robots" content="NOODP" />
<meta name="msapplication-config" content="/a/sa/sa_config-nine.xml" /><meta name="theme-color" content="#4F4F4F" />
<meta name="description" content="使用 Microsoft Bing 搜索引擎,即可获得最佳搜索结果和搜索体验。" />
...
</html>
实例2:下载文件
你可以用curl命令来下载文件,只需要指定文件的URL即可。例如,你可以用以下命令来下载一个图片文件:
[linux@bashcommandnotfound.cn ~]$ curl -O https://www.bing.com/th?id=OGL.9c7f3b6e0f3d4f7c9c9a1f8f0f9c0f7c&rf=LaDigue_1920x1080.jpg&pid=hp
这个命令会将图片文件保存到当前目录中,文件名由URL的最后一部分决定。如果你想指定文件名,你可以用-o选项,如下:
[linux@bashcommandnotfound.cn ~]$ curl -o bing.jpg https://www.bing.com/th?id=OGL.9c7f3b6e0f3d4f7c9c9a1f8f0f9c0f7c&rf=LaDigue_1920x1080.jpg&pid=hp
这个命令会将图片文件保存为bing.jpg。
实例3:上传文件
你可以用curl命令来上传文件,只需要指定文件的路径和目标的URL即可。例如,你可以用以下命令来上传一个文本文件到一个FTP服务器:
[linux@bashcommandnotfound.cn ~]$ curl -u user:password -T file.txt ftp://example.com
这个命令会将file.txt文件上传到example.com的根目录中,-u选项用来设置用户名和密码,-T选项用来指定要上传的文件。如果你想指定上传的目录和文件名,你可以在URL中加上,如下:
[linux@bashcommandnotfound.cn ~]$ curl -u user:password -T file.txt ftp://example.com/upload/new.txt
这个命令会将file.txt文件上传到example.com的upload目录中,并重命名为new.txt。
实例4:发送API请求
你可以用curl命令来发送API请求,只需要指定请求的方法,数据,头部和URL即可。例如,你可以用以下命令来发送一个GET请求,获取一个JSON格式的天气数据:
[linux@bashcommandnotfound.cn ~]$ curl -X GET -H "Content-Type: application/json" https://api.openweathermap.org/data/2.5/weather?q=Hong%20Kong&appid=your_api_key
这个命令会返回一个类似于以下的JSON数据:
{"coord":{"lon":114.1577,"lat":22.2855},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"stations","main":{"temp":296.15,"feels_like":296.67,"temp_min":295.15,"temp_max":297.15,"pressure":1018,"humidity":73},"visibility":10000,"wind":{"speed":5.14,"deg":80},"clouds":{"all":75},"dt":1642502400,"sys":{"type":1,"id":9154,"country":"HK","sunrise":1642472408,"sunset":1642511439},"timezone":28800,"id":1819729,"name":"Hong Kong","cod":200}
你可以用-d选项来发送POST请求,附带指定的数据,如下:
[linux@bashcommandnotfound.cn ~]$ curl -X POST -H "Content-Type: application/json" -d '{"name":"Alice","age":25}' https://example.com/api/users
这个命令会发送一个包含name和age字段的JSON数据到example.com的api/users接口。
实例5:测试网站性能
你可以用curl命令来测试网站的性能,只需要指定-w选项,用来显示指定的信息,如下:
[linux@bashcommandnotfound.cn ~]$ curl -w "@curl-format.txt" -o /dev/null -s https://www.bing.com
这个命令会将网页的输出重定向到/dev/null,即不显示在屏幕上,-s选项用来隐藏错误和进度信息,-w选项用来指定一个文件,该文件中包含了要显示的信息的格式。例如,curl-format.txt文件的内容如下:
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
这个文件中的变量都是curl命令提供的,用来表示不同的时间,如域名解析时间,连接时间,传输时间等。你可以在这里查看所有的变量和含义。运行上面的命令后,你会得到类似于以下的输出:
time_namelookup: 0.004
time_connect: 0.028
time_appconnect: 0.000
time_pretransfer: 0.028
time_redirect: 0.000
time_starttransfer: 0.103
----------
time_total: 0.103
这些信息可以帮助你分析网站的性能和瓶颈。
实例6:显示HTTP状态码
你可以用curl命令来显示HTTP状态码,只需要指定-w选项,用来显示指定的信息,如下:
[linux@bashcommandnotfound.cn ~]$ curl -w "%{http_code}" -o /dev/null -s https://www.bing.com
这个命令会将网页的输出重定向到/dev/null,即不显示在屏幕上,-s选项用来隐藏错误和进度信息,-w选项用来指定要显示的信息,这里是HTTP状态码。运行上面的命令后,你会得到类似于以下的输出:
200
这个输出表示网页的HTTP状态码是200,意味着请求成功。你可以在这里查看所有的HTTP状态码和含义。
实例7:显示HTTP头部
你可以用curl命令来显示HTTP头部,只需要指定-I选项,用来只显示响应头,不显示响应体,如下:
[linux@bashcommandnotfound.cn ~]$ curl -I https://www.bing.com
这个命令会显示网页的HTTP头部信息,如下:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 487
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
Set-Cookie: _EDGE_S=F=1&SID=0F7E3BC9BEC9A1E9B3F1F2C9BFE7F7E9; path=/; httponly; domain=bing.com
Set-Cookie: _EDGE_V=1; path=/; httponly; expires=Wed, 17-Jan-2024 06:28:38 GMT; domain=bing.com
Set-Cookie: MUID=0F7E3BC9BEC9A1E9B3F1F2C9BFE7F7E9; path=/; expires=Wed, 17-Jan-2024 06:28:38 GMT; domain=bing.com
Set-Cookie: MUIDB=0F7E3BC9BEC9A1E9B3F1F2C9BFE7F7E9; path=/; httponly; expires=Wed, 17-Jan-2024 06:28:38 GMT
X-MSEdge-Ref: Ref A: 9C7F3B6E0F3D4F7C9C9A1F8F0F9C0F7C Ref B: HK2EDGE0915 Ref C: 2023-12-18T06:28:38Z
Date: Mon, 18 Dec 2023 06:28:38 GMT
这些信息可以帮助你了解网页的元数据,如缓存控制,内容类型,内容长度,cookie,日期等。
实例8:显示HTTP体
你可以用curl命令来显示HTTP体,只需要指定-i选项,用来在输出中包含响应头,如下:
[linux@bashcommandnotfound.cn ~]$ curl -i https://www.bing.com
这个命令会显示网页的HTTP头部和HTTP体信息,如下:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 487
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
Set-Cookie: _EDGE_S=F=1&SID=0F7E3BC9BEC9A1E9B3F1F2C9BFE7F7E9; path=/; httponly; domain=bing.com
Set-Cookie: _EDGE_V=1; path=/; httponly; expires=Wed, 17-Jan-2024 06:28:38 GMT; domain=bing.com
Set-Cookie: MUID=0F7E3BC9BEC9A1E9B3F1F2C9BFE7F7E9; path=/; expires=Wed, 17-Jan-2024 06:28:38 GMT; domain=bing.com
Set-Cookie: MUIDB=0F7E3BC9BEC9A1E9B3F1F2C9BFE7F7E9; path=/; httponly; expires=Wed, 17-Jan-2024 06:28:38 GMT
X-MSEdge-Ref: Ref A: 9C7F3B6E0F3D4F7C9C9A1F8F0F9C0F7C Ref B: HK2EDGE0915 Ref C: 2023-12-18T06:28:38Z
Date: Mon, 18 Dec 2023 06:28:38 GMT
<!DOCTYPE html>
<html lang="zh" dir="ltr" data-bm="200">
<head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1" /><meta name="referrer" content="origin-when-cross-origin" /><meta name="robots" content="NOODP" /><meta name="msapplication-config" content="/a/sa/sa_config-nine.xml" /><meta name="theme-color" content="#4F4F4F" /><meta name="description" content="使用 Microsoft Bing 搜索引擎,即可获得最佳搜索结果和搜索体验。" /><meta name="title" content="Bing" />
···
</html>
实例9:模拟用户行为
你可以用curl命令来模拟用户行为,只需要指定-A选项,用来设置用户代理字符串,如下:
[linux@bashcommandnotfound.cn ~]$ curl -A "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1" https://www.bing.com
这个命令会模拟一个iPhone用户访问Bing网站,-A选项用来设置用户代理字符串,这里是一个iPhone的用户代理字符串。你可以在这里查看和选择不同的用户代理字符串,用来模拟不同的浏览器或设备。
实例10:发送cookie数据
你可以用curl命令来发送cookie数据,只需要指定-b选项,用来附带指定的cookie数据,如下:
[linux@bashcommandnotfound.cn ~]$ curl -b "name=alice;age=25" https://bashcommandnotfound.cn
这个命令会发送两个cookie数据,name和age,到bashcommandnotfound.cn网站,-b选项用来附带指定的cookie数据,可以是一个或多个,用分号分隔。你也可以用-c选项,用来保存接收到的cookie数据到指定的文件中,如下:
[linux@bashcommandnotfound.cn ~]$ curl -c cookies.txt https://bashcommandnotfound.cn
这个命令会将接收到的cookie数据保存到cookies.txt文件中,-c选项用来指定要保存的文件名。你也可以用-b选项,用来读取文件中的cookie数据,如下:
[linux@bashcommandnotfound.cn ~]$ curl -b cookies.txt https://bashcommandnotfound.cn
这个命令会读取cookies.txt文件中的cookie数据,并发送到bashcommandnotfound.cn网站,-b选项用来指定要读取的文件名。
实例11:发送表单数据
你可以用curl命令来发送表单数据,只需要指定-F选项,用来附带指定的表单数据,如下:
[linux@bashcommandnotfound.cn ~]$ curl -F "name=alice" -F "age=25" https://example.com/form
这个命令会发送两个表单数据,name和age,到example.com的form接口,-F选项用来附带指定的表单数据,可以是一个或多个。你也可以用@符号,用来指定一个文件作为表单数据的内容,如下:
[linux@bashcommandnotfound.cn ~]$ curl -F "file=@file.txt" https://example.com/form
这个命令会将file.txt文件的内容作为表单数据,发送到example.com的form接口,-F选项用来指定文件的路径和名称。
实例12:跟随重定向
你可以用curl命令来跟随重定向,只需要指定-L选项,用来自动跟随服务器返回的3xx状态码的URL,如下:
[linux@bashcommandnotfound.cn ~]$ curl -L https://example.com/redirect
这个命令会访问example.com的redirect接口,如果服务器返回一个3xx状态码,如301,302,307等,表示重定向到另一个URL,curl会自动跟随该URL,直到得到一个非3xx状态码的响应,-L选项用来开启自动跟随重定向的功能。
实例13:设置请求头
你可以用curl命令来设置请求头,只需要指定-H选项,用来设置指定的请求头,如下:
[linux@bashcommandnotfound.cn ~]$ curl -H "Accept: application/json" -H "Authorization: Bearer your_token" https://example.com/api
这个命令会设置两个请求头,Accept和Authorization,到example.com的api接口,-H选项用来设置指定的请求头,可以是一个或多个。你可以在这里查看所有的请求头和含义。
实例14:设置身份验证
你可以用curl命令来设置身份验证,只需要指定-u选项,用来设置用户名和密码,如下:
[linux@bashcommandnotfound.cn ~]$ curl -u user:password https://example.com/secure
这个命令会设置用户名和密码,user和password,到example.com的secure接口,-u选项用来设置用户名和密码,用冒号分隔。这种方式是使用基本认证(Basic Authentication)的方法,你也可以使用其他的认证方法,如摘要认证(Digest Authentication),OAuth认证等,你可以在这里查看更多的认证方法和选项。
Linux curl命令的注意事项
以下是一些使用curl命令时需要注意的事项:
- 如果你的URL中包含特殊字符,如空格,引号,问号等,你需要用百分号编码来替换它们,否则curl可能无法正确解析URL。例如,你可以用%20来替换空格,用%22来替换引号,用%3F来替换问号等。你可以在这里查看和转换百分号编码。
- 如果你的URL中包含变量,如$HOME,你需要用双引号来包裹URL,否则curl可能无法正确解析变量。例如,你可以用以下命令来下载一个文件到你的家目录中:
[linux@bashcommandnotfound.cn ~]$ curl -o "$HOME/file.txt" https://example.com/file.txt
- 如果你的系统中没有curl命令,你可能会看到以下的错误信息:
[linux@bashcommandnotfound.cn ~]$ curl https://bashcommandnotfound.cn
bash: curl: command not found
这时,你需要根据你的系统类型来安装curl命令,参考上面的Linux curl命令适用的Linux版本一节。
评论区