CURL
curl
是一个非常强大的命令行工具,用于发送和接收网络请求。以下是 curl
的一些常见命令种类及其示范代码。涵盖了各种不同类型的请求,常见的选项以及如何与 API 进行交互。
1. 基本 GET 请求
最简单的 curl
用法是发送 GET 请求:
curl https://api.example.com/data
2. 带查询参数的 GET 请求
GET 请求可以通过 URL 添加查询参数:
curl "https://api.example.com/data?param1=value1¶m2=value2"
3. 带请求头的 GET 请求
使用 -H
或 --header
来添加请求头:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://api.example.com/data
4. POST 请求
发送 POST 请求并附带数据:
curl -X POST -d "param1=value1¶m2=value2" https://api.example.com/submit
5. POST 请求带 JSON 数据
如果你需要发送 JSON 格式的数据,可以使用 -H
设置 Content-Type
为 application/json
,并通过 -d
传递 JSON 数据:
curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' https://api.example.com/submit
6. 使用文件上传
通过 -F
参数上传文件:
curl -F "file=@/path/to/your/file.txt" https://api.example.com/upload
7. 使用 Cookie
通过 -b
来传递 Cookie:
curl -b "name=value" https://api.example.com/data
8. 下载文件
使用 -O
选项来下载文件并保存原始文件名:
curl -O https://example.com/file.zip
9. 下载文件并重命名
如果你想在下载文件时更改文件名,可以使用 -o
:
curl -o new_filename.zip https://example.com/file.zip
10. POST 请求并将返回数据保存到文件
将 POST 请求的响应保存到本地文件中:
curl -X POST -d "param1=value1¶m2=value2" -o response.txt https://api.example.com/submit
11. HTTPS 请求(跳过 SSL 验证)
如果你在开发过程中使用自签名证书,可能会遇到 SSL 验证错误,可以用 -k
跳过验证:
curl -k https://api.example.com/data
12. 发送带有多个请求头的请求
你可以使用多个 -H
选项添加多个请求头:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" -H "Accept: application/json" https://api.example.com/data
13. 带有基本身份验证的请求
使用 -u
来进行基本身份验证:
curl -u username:password https://api.example.com/data
14. 显示请求和响应头
使用 -v
显示请求和响应的详细信息(包括头信息):
curl -v https://api.example.com/data
15. 跟随重定向
通过 -L
命令,curl
会自动跟随 HTTP 重定向:
curl -L http://example.com/redirect
16. 限制下载/上传速率
限制下载或上传速度,可以使用 --limit-rate
:
curl --limit-rate 100K -O https://example.com/largefile.zip
17. 发送 PUT 请求
PUT 请求用来上传或修改资源:
curl -X PUT -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" https://api.example.com/update
18. 删除资源
使用 -X DELETE
来发送 DELETE 请求:
curl -X DELETE https://api.example.com/delete/resource
19. HTTP 状态码查看
使用 -i
查看 HTTP 响应头和状态码:
curl -i https://api.example.com/data
20. 限速下载
限制下载速率,单位是 k
(KB)或者 m
(MB):
curl --limit-rate 1M -O https://example.com/largefile.zip
21. 使用代理
如果你需要通过代理服务器发送请求,可以使用 -x
:
curl -x http://proxy.example.com:8080 https://api.example.com/data
22. 上传多文件
如果你需要同时上传多个文件,使用 -F
可以一次性上传多个文件:
curl -F "file1=@/path/to/file1.txt" -F "file2=@/path/to/file2.jpg" https://api.example.com/upload
23. 保存请求日志
将所有请求和响应的日志输出到文件中:
curl -v https://api.example.com/data > curl_log.txt 2>&1
24. 显示进度条
默认情况下,curl
会显示进度条。你也可以用 --progress-bar
强制显示进度条:
curl --progress-bar -O https://example.com/largefile.zip
25. 发送 PATCH 请求
PATCH 请求用于部分更新资源:
curl -X PATCH -d '{"key1":"new_value"}' -H "Content-Type: application/json" https://api.example.com/patch
26. 发送 HEAD 请求
HEAD 请求与 GET 请求类似,但是只返回头部信息,不返回响应体:
curl -I https://api.example.com/data
TELNET
telnet
是一个用于与远程主机建立连接并进行通信的网络协议工具,通常用于测试网络连接和与远程服务器交互。虽然 telnet
命令本身不包含很多“命令种类”,但它确实有一些可用于管理连接、发送和接收数据的选项。
以下是 telnet
命令的一些常见用法和示例:
1. 连接到远程主机
连接到远程主机的最基本命令格式:
telnet <hostname> <port>
示例:
telnet example.com 80
这会通过端口 80 连接到 example.com
,通常用于测试 HTTP 服务。
2. 使用IP地址连接
你也可以通过IP地址来连接:
telnet 192.168.1.1 23
此命令尝试连接到 192.168.1.1
的端口 23,通常用于 Telnet 服务。
3. 连接到标准Telnet端口
如果你不指定端口,默认会连接到 Telnet 服务的标准端口(23):
telnet example.com
这将尝试连接到 example.com
的端口 23。
4. 测试端口连通性
如果你只关心端口是否开放,可以使用 telnet
来测试:
telnet example.com 8080
如果端口 8080 上有服务运行,连接会成功;否则,会显示连接失败的错误信息。
5. 发送简单的 HTTP 请求
你可以通过 telnet
直接向 HTTP 服务发送请求,模拟浏览器发起的请求。例如:
telnet example.com 80
然后输入 HTTP 请求头:
GET / HTTP/1.1 Host: example.com
(注意:请求行和 Host 后要有两个换行符,表示请求的结束。)
这将模拟一个简单的 HTTP GET 请求,返回网页内容。
6. 使用Telnet发送QUIT命令关闭连接
在 telnet
会话中,你可以通过输入 quit
或 exit
来关闭连接:
quit
7. 设置Telnet选项
Telnet 提供了一些选项,可以通过命令 set
来配置:
启用回显(Echo):
set echo
这会启用本地回显,让你输入的字符显示在屏幕上。
禁用回显(Echo):
unset echo
禁用回显,输入的字符不再显示。
启用字符传输模式:
set crlf
禁用字符传输模式:
unset crlf
8. 打开和关闭自动换行(CRLF)
你可以通过 crlf
和 nocr
来控制自动换行:
-
打开换行(CRLF):
set crlf
-
关闭换行(NCR):
unset crlf
9. 显示Telnet连接的状态
如果你想查看 telnet
会话的状态(例如,是否成功连接),可以在命令行中输入以下命令:
status
10. 查看Telnet命令帮助
在 telnet
会话中,输入 ?
或 help
来显示可用的命令和选项:
? # 或者 help
这将列出所有支持的命令。
11. 使用Telnet设置特定的字符模式
通过 set
命令,你还可以配置其他选项:
set echo
:启用回显set crlf
:启用换行set binary
:以二进制模式发送set env
:设置环境变量
12. Telnet高级用法
一些操作可能依赖于远程 Telnet 服务器的设置。在某些特殊情况下,你可能需要使用 telnet
来与支持的设备通信(如路由器、交换机、打印机等)。例如,你可以与设备进行交互,如以下情况:
telnet 192.168.1.1 23
在设备上通常会显示一个登录提示符,你可以输入用户名和密码进行身份验证。
区别
telnet
和 curl
都是用于与远程主机进行通信的命令行工具,但它们的用途、工作原理和使用场景有所不同。下面详细解释它们之间的区别。
1. 功能和用途
-
telnet
:telnet
是一个网络协议工具,用于通过 Telnet 协议与远程主机建立连接,并进行交互式通信。- 它可以让你与远程服务器进行基本的文本交互,通常用于测试端口、排查网络连接问题,以及与某些支持 Telnet 协议的服务(如路由器、交换机等)交互。
telnet
主要用于低级别的网络调试和通信,可以连接到任何开放的端口,不局限于特定协议。
-
curl
:curl
是一个广泛使用的命令行工具,用于与各种网络服务进行通信,支持多种协议,包括 HTTP、HTTPS、FTP、SFTP、SMTP 等。curl
用于与 Web 服务器交互,发送和接收数据,特别是用于测试 RESTful API、下载文件、提交表单等操作。- 它支持高级功能,如请求头设置、数据格式(如 JSON)、认证、代理、HTTPS 等,通常用于与 HTTP 或其他网络服务进行更复杂的交互。
2. 支持的协议
-
telnet
:telnet
仅支持 Telnet 协议(端口 23),该协议用于建立基于文本的连接。它是一种非常基础的通信协议,主要用于测试连接、发送简单文本数据等。- 它通常不用于处理更复杂的协议(如 HTTP、HTTPS、FTP 等)。
-
curl
:curl
支持多种协议,主要包括:- HTTP 和 HTTPS:最常用于 Web 服务交互。
- FTP 和 SFTP:用于文件传输。
- SMTP、POP3 和 IMAP:用于电子邮件相关的协议。
- Telnet 和 LDAP 等其他协议。
- 它可以处理更高层次的协议(如 HTTP/HTTPS 请求),支持请求头、POST 请求、文件上传、身份验证、代理设置等功能。
3. 交互性
-
telnet
:telnet
是交互式的,它连接到远程主机后,你可以通过命令行与远程主机进行交互。通常需要在连接后手动输入命令。- 例如,你可以用
telnet
连接到远程服务器并手动发送 HTTP 请求:telnet example.com 80 GET / HTTP/1.1 Host: example.com
-
curl
:curl
是非交互式的,它通过命令行发送请求并立即返回结果。你可以直接通过命令指定要发送的数据、请求头等。curl
适合用于自动化脚本、测试 API、文件下载、上传等任务,而不需要人工干预。curl -X GET http://example.com
4. 使用场景
-
telnet
:- 用于调试和诊断网络连接。例如,你可以使用
telnet
检查某个端口是否开放,是否能够连接到指定服务。 - 适用于测试某些服务是否正在运行,尤其是 HTTP 服务、邮件服务等。
- 示例:
这将连接到telnet example.com 80
example.com
的 80 端口,通常用于测试 HTTP 服务是否可用。
- 用于调试和诊断网络连接。例如,你可以使用
-
curl
:- 主要用于与 Web 服务器进行交互,发送 HTTP 请求,获取 HTTP 响应。
- 可以用于自动化任务、脚本化测试 API,文件上传/下载等。
- 示例:
这将向curl -X POST -d "username=test&password=1234" http://example.com/login
example.com
的/login
端点发送一个 POST 请求。
5. 协议处理能力
-
telnet
:telnet
仅用于建立一个原始的 TCP 连接,不处理高级协议,如 HTTP 请求、响应、内容解析等。- 你可以通过手动输入协议请求(例如 HTTP 请求头)与远程主机通信,但这非常基础和低级。
-
curl
:curl
能够自动处理各种高级协议。对于 HTTP,它能够处理请求头、响应头、请求体、代理、重定向、身份验证等。- 例如,发送一个包含 JSON 数据的 POST 请求:
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com/api
6. 显示内容和响应处理
-
telnet
:telnet
的输出通常是原始的文本数据,没有内建的功能来处理或格式化响应内容。它仅显示远程主机返回的原始数据或响应。- 它不会自动解析或处理 HTTP 响应、状态码等。
-
curl
:curl
支持返回详细的响应信息,包括 HTTP 状态码、响应头、响应体等。- 它可以通过选项显示详细的请求和响应信息。例如,使用
-i
显示响应头,使用-v
显示详细的请求/响应过程:curl -i http://example.com
7. 安全性
-
telnet
:telnet
是一个不加密的协议,因此任何通过telnet
发送的数据(包括用户名、密码)都是明文传输的,容易受到中间人攻击。- 因此,
telnet
不再推荐用于生产环境中的敏感操作。
-
curl
:curl
支持 HTTPS 协议,能够加密传输数据,保障通信的安全性。它广泛用于 Web 服务的安全访问。- 如果使用
curl
连接 HTTPS 服务,它会自动加密通信,防止数据泄漏。
8. 错误处理和调试
-
telnet
:telnet
的错误反馈比较简单,通常只会显示连接成功与否的信息,对于协议层的调试不够深入。- 它可以用来快速诊断连接问题,但并不提供详细的错误信息或响应内容分析。
-
curl
:curl
提供详细的错误信息和调试功能,可以帮助分析 HTTP 请求的失败原因。你可以使用-v
或--trace
来获取详细的调试信息。
总结
特性 | telnet |
curl |
---|---|---|
协议支持 | 主要是 Telnet 协议 | 支持 HTTP、HTTPS、FTP、SFTP、SMTP 等多种协议 |
交互性 | 交互式 | 非交互式 |
用途 | 测试端口、与某些服务交互、网络诊断 | 与 Web 服务交互、测试 API、下载文件等 |
功能 | 基本的连接和命令交互 | 高级的请求和响应处理,如 HTTP 请求、认证等 |
安全性 | 不加密 | 支持 HTTPS,加密传输数据 |
错误处理和调试 | 简单的错误反馈 | 详细的错误信息和调试功能 |
总的来说,telnet
是一个基础的网络诊断工具,适用于测试端口和与远程主机交互;而 curl
是一个功能强大的网络工具,专门用于与 HTTP 服务(以及其他协议)进行交互,支持高级功能和安全性,适合在脚本和自动化任务中使用。