Linux-Curl

简介

curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。

它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

说明

参数的顺序没有固定,可以任意调整

同一个参数可以出现多次,根据需要添加

参数可以任意组合,根据需要组合

参数的大小写敏感,大小写具备不同的含义

GET请求

  • 普通get请求
curl https://www.baidu.com
  • 带数据的get请求

带一个参数

 curl https://www.baidu.com?id=1

带多个参数,用引号括起来,否则&后的参数都无法被解析

curl 'https://www.baidu.com?id=1&name=jack'
  • 带请求头的get请求,支持多个
curl 'https://www.baidu.com?id=1&name=jack' -H "token:123" -H "Authorization: Basic QVBJxxxx"

POST请

  • 普通post请求,-X POST可省略。
curl -X POST https://google.com/login
  • 提交表单数据的post请求
curl -d 'login=emma&password=123' -X POST https://google.com/login

或者

curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login

使用-d参数以后,HTTP 请求会自动加上请求头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此也可以省略-X POST

  • 提交json格式的post请求
curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

添加HTTP 请求头是Content-Type: application/json,然后用-d参数发送 JSON 数据。-X POST可省略。

  • 提交文件的post请求
curl -X POST -F "file=@photo.png" http://example.com/upload

上面命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。-X POST可省略

curl 在上传文件时,会根据文件扩展名自动推断并设置 MIME 类型。如果您需要自定义 MIME 类型,可以使用 -H "Content-Type" 选项。正确设置 MIME 类型对于服务器端正确处理上传文件非常重要。

常用参数

  • i

-i参数打印出服务器回应的 HTTP 标头。会输出响应头+响应体

  • I

-I参数向服务器发出 HEAD 请求(只请求页面的首部),然会将服务器返回的 HTTP 标头打印出来。不会输出响应

  • L

-L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。

  • limit-rate

--limit-rate用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。

curl --limit-rate 200k https://google.com 该命令将宽限制在每秒 200K 字节。

  • o

-o(小写)参数将服务器的回应保存成文件,等同于wget命令。

curl -o example.html https://www.example.com 该命令将响应保存成example.html

  • x

-x(小写)参数指定 HTTP 请求的代理。

  • v

curl -v https://www.example.com 输出通信的整个过程,用于调试。

  • data-urlencode

--data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。

注意

在使用 curl 命令时,双引号("")和单引号('')在处理字符串方面有细微但重要的区别,这主要涉及到 shell 对特殊字符的解释。

单引号('')

  • 强引用: 单引号内的所有字符都按照字面意思处理,包括特殊字符(如 $、`、\ 等)。
  • 防止变量替换: 单引号内的变量名不会被替换成其对应的值。
  • 适用于:
    • 包含特殊字符的字符串,需要防止 shell 进行解释。
    • 需要精确控制字符串内容的情况。

示例:

curl 'http://example.com/search?query=hello+world&page=1'

在这个例子中,单引号确保 URL 中的 + 号被正确传递,而不是被 shell 解释为其他含义。

双引号("")

  • 弱引用: 双引号内的字符大部分按照字面意思处理,但会对一些特殊字符进行解释,如:
    • $: 用于变量替换。
    • ` ``: 用于命令替换。
    • \: 用于转义特殊字符。
  • 允许变量替换: 双引号内的变量名会被替换成其对应的值。
  • 适用于:
    • 包含变量的字符串。
    • 需要进行简单的转义的字符串。

示例:

name="world"
curl "http://example.com/search?query=hello+$name&page=1"

在这个例子中,双引号允许变量 name 被替换成它的值 "world"。

小结

  • 何时使用单引号:
    • URL 中包含特殊字符时。
    • 需要精确控制字符串内容时。
    • 不希望 shell 对字符串进行任何解释时。
  • 何时使用双引号:
    • 字符串中包含变量时。
    • 需要进行简单的转义时。
示例 解释
curl 'http://example.com/search?query=hello+world' URL 中的 + 号被原样传递。
curl "http://example.com/search?query=hello+world" 与单引号效果相同。
name="world"; curl "http://example.com/search?query=hello+$name" 变量 name 被替换为 "world"。
curl 'http://example.com/search?query=hello\$name' $ 被视为普通字符。
curl "http://example.com/search?query=hello\$name" $ 被转义,name 不被替换。
SystemCaller
SystemCaller

https://gravatar.com/noisily745e35dad0

文章: 47

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注