CURL的使用详解

CURL的使用详解

发起GET请求

  1. 命令后直接跟地址

    curl 'https://www.baidu.com'
    
  2. 请求中拼接查询参数

    curl -G -d 'key=value' 'https://www.baidu.com'
    

    这里就等于在浏览器地址栏里访问 https://www.baidu.com?key=value

    如果需要对value进行url编码,那么可以这样写:

    curl -G --data-urlencode 'key=value' 'https://www.baidu.com'
    

    注意,如果没有-G参数的话,会发起一个POST请求,-d指定的参数会被使用form表单的形式提交

  3. 保存响应信息到一个指定文件

    curl -o response.txt 'https://www.baidu.com'
    
  4. 请求中增加header

    curl 'https://www.baidu.com/' \
    -H 'Host: www.baidu.com' \
    -H 'Accept-Language: zh-cn' \
    -H 'Referer: https://www.baidu.com/'
    
    

发起POST请求

  1. 发起一个最简单的POST请求

    curl -X POST 'https://www.baidu.com'
    
  2. 使用form表单的形式提交数据

    curl -d 'username=123&password=123' -X POST 'https://www.baidu.com'
    

    -d 后面的内容就是request body

    增加了-d 这个参数,会默认的设置 header Content-Typeapplication/x-www-form-urlencoded

    甚至在设置了-d 以后,-X POST 这个参数也可以省略掉,请求方式默认会使用POST 方式

    curl -d 'username=123&password=123' 'https://www.baidu.com'
    
  3. form表单数据拆开,更易阅读

    curl 'https://www.baidu.com' \
    -d 'username=123' \
    -d 'password=123' 
    

    多个参数的时候,可以每个参数用一个单独的-d 来指定

  4. 使用JSON格式提交数据

    curl 'https://www.baidu.com' \
    -H 'Content-Type: application/json' \
    -d '{"username": "123", "password": "123"}'
    

    -H: 首先使用-H 指定提交的数据为json格式

    -d: 是指定提交的内容,这里是一个json格式的字符串

  5. 从文件中加载提交数据

    curl -d '@data.txt' 'https://www.baidu.com'
    

    -d 参数中使用 @符号来指定一个文件名,告诉curl加载这个文件的内容来作为请求的数据。

  6. 对提交的数据进行URL编码

    上面讲到的 -d 参数是不会对请求的数据做任何处理的,但是有的时候我们可能会提交一些待特殊字符的参数,例如网址、空格、问号等等,这个时候就需要对请求数据进行url编码,curl已经提供了先编码再提交的功能,只需要吧-d 替换为 --data-urlencode--data-urlencode的其他用法与 -d完全一样。

    curl 'https://www.baidu.com' \
    --data-urlencode 'username=123' \
    --data-urlencode 'password=123' 
    
  7. 上传文件

    curl -F '[email protected]' 'https://www.baidu.com'
    

    -F :利用这个参数指定要上传的文件,同时参数还会自动的设置header中的Content-Typemultipart/form-data

  8. 上传文件的同时指定MIME类型

    curl -F '[email protected];type=image/png' 'https://www.baidu.com'
    
  9. 上传文件,修改上传文件的文件名

    curl -F '[email protected];filename=otherName.png' 'https://www.baidu.com'
    

cookies自动保存与发送

curl -c cookies.txt 'https://www.baidu.com' \
--data-urlencode 'username=123' \
--data-urlencode 'password=123'


curl -b cookies.txt 'https://www.baidu.com'

-c 会自动的把cookies保存到 cookies.txt 文件中

-b 会自动的把cookies.txt 中的内容当做cookies放到请求中

User Agent修改

  1. 利用 -A 参数修改

    使用 -A 参数可以直接修改 User-Agent

    #模拟Firefox
    curl 'https://www.baidu.com' \
    -A 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'
    
    #模拟Chrome
    curl 'https://www.baidu.com' \
    -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
    
    #模拟Safari
    curl 'https://www.baidu.com' \
    -A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15'
    
  2. 通过 -H 修改

    curl 'https://www.baidu.com' \
    -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15'
    

修改 Referrer

修改Referrer也有两种方法,一种是通过-e 直接修改,另一种是通过 -H 在header中修改

curl 'https://www.baidu.com' \
-e 'https://www.baidu.com'

curl 'https://www.baidu.com' \
-H 'Referer: https://www.baidu.com'

响应重定向

默认情况下curl不响应重定向,也就是在响应码为 3XX 的时候不会执行重定向,需要指定-L 参数才会响应。

curl -L 'https://www.baidu.com'

静默模式

curl -s 'https://www.baidu.com'

-s 会隐藏掉错误信息和进度条,但是会打印响应信息。

如果也想把响应信息省略掉,那么可以使用下面的命令

curl -s -o /dev/null 'https://www.baidu.com'

-o /dev/null 会丢弃响应body

如果想静默模式的情况下,打印请求出现的错误,可以使用下面的命令

curl -S -s -o /dev/null 'https://www.baidu.com'

-S-s 一起用的时候,仍然会隐藏进度条,但是当请求错误的时候,会打印错误信息。

限速

#限制访问速度为1k
curl --limit-rate 1k 'https://www.baidu.com'

#限制访问速度为1byte
curl --limit-rate 1 'https://www.baidu.com'

打印请求Headers

curl -v -s -o /dev/null --stderr - 'https://www.baidu.com' | grep '^>'

-v 会打印出详细的调试信息, -o /dev/null 把响应body丢弃

--stderr - 把标准的错误输出转发到标准输出,这样就可以使用grep 命令来做筛选了。

筛选出>开头的行,就是请求Headers

只打印响应码

curl -w '%{response_code}' -s -o /dev/null 'https://www.baidu.com'

不验证ssl证书

curl -k 'https://www.baidu.com'

打印响应Headers

  1. 只用-i 这样会既打印Header信息又打印Body信息

    curl -i https://www.baidu.com
    
  1. 只打印Header信息

    curl -s -o /dev/null -D - https://www.baidu.com
    

    -s :作用是不展示进度条

    -o /dev/null :作用是把输出的body丢弃

    -D - :作用是把headers信息转存到一个文件中,这里的- 代表标准输出

    下面这个命令看似也是只打印了header

    curl -I https://www.baidu.com
    

    但是实际这个命令是发送的HEAD请求,而不是GET或者POST,从返回的头信息上也可以看出来。

    image-20210721092350110

    下面的返回长度有 2443,上面的返回长度只有277。

    另外,如果是一些resful风格接口,只支持GET或者POST,这时候使用-I的时候就会报404错误

    image-20210721092602331

你可能感兴趣的:(CURL的使用详解)