java每日精进 2.21 CURL&TELNET

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&param2=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&param2=value2" https://api.example.com/submit

5. POST 请求带 JSON 数据

如果你需要发送 JSON 格式的数据,可以使用 -H 设置 Content-Typeapplication/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&param2=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 会话中,你可以通过输入 quitexit 来关闭连接:

quit

7. 设置Telnet选项

Telnet 提供了一些选项,可以通过命令 set 来配置:

启用回显(Echo):

set echo

这会启用本地回显,让你输入的字符显示在屏幕上。

禁用回显(Echo):

unset echo

禁用回显,输入的字符不再显示。

启用字符传输模式:

set crlf

禁用字符传输模式:

unset crlf

8. 打开和关闭自动换行(CRLF)

你可以通过 crlfnocr 来控制自动换行:

  • 打开换行(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

在设备上通常会显示一个登录提示符,你可以输入用户名和密码进行身份验证。

区别

telnetcurl 都是用于与远程主机进行通信的命令行工具,但它们的用途、工作原理和使用场景有所不同。下面详细解释它们之间的区别。

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 支持多种协议,主要包括:
      • HTTPHTTPS:最常用于 Web 服务交互。
      • FTPSFTP:用于文件传输。
      • SMTPPOP3IMAP:用于电子邮件相关的协议。
      • TelnetLDAP 等其他协议。
    • 它可以处理更高层次的协议(如 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 服务(以及其他协议)进行交互,支持高级功能和安全性,适合在脚本和自动化任务中使用。

猜你喜欢

转载自blog.csdn.net/weixin_51721783/article/details/145780689
今日推荐