curl

一 介绍

linux中一个传输数据的工具,支持多种协议,还支持代理、用户认证、SSL、cookies等等特性。

一些默认行为:

  • 默认使用HTTP协议;
  • 消息体输出到terminal;
  • 消息体未输出到terminal时,显示进度条。

一些常用选项:

  • -X:指定请求方法,未设置其他选项时,一般为Get方法
  • -H:指定头字段,一般来说,头字段只需要Content-Type,其他会自动设置好。
  • --data:设置请求体

post请求中,一般只使用-d,--data选项,因为此时默认POST请求,Content-Typeapplication/x-www-form-urlencoded;如果想模拟表单文件上传,可使用-F,-form选项,它默认POST请求,Content-Typemultipart/form-data

同类工具还有wget,但curl更强大

二 主要选项

2.1 --data与–form

下列选项都默认使用POST请求方法,通过<data>填充请求消息体。

  • --data系列:Content-Type默认为application/x-www-form-urlencoded

    • -d,--data <data>--data-ascii <data>:会自动进行url编码,能够通过@指定文件。

      # 会自动进行url编码
      curl -v --data "name=tom&password=12 3 是的456" http://localhost:8080/test
      #注意内容要进行url编码
      curl -v --data "birthyear=1905&press=%200k%20" http://localhost:8080/test
      #可以一次写一个参数
      curl -v -d "name=tom" -d "password=123  sdw 456" http://localhost:8080/test
      
    • --data-binary <data>:数据直接填充,没有额外的数据处理过程(即url编码)。数据以@开头时,会被认定为文件,直接将文件的内容读入,但不进行url编码,如:

      curl -v --data-binary "@baidu.html" -H "Content-Type: text/*" http://localhost:8080/test2
      

      设置content-type是为了防止后端错误解析内容,

    • --data-raw <data>:类似--data,但没有@的文件解析过程

    • --data-urlencode <data>:类似--dataurl编码功能更多?

    总之,感觉他们功能重叠,有点分不开,总之--data是万能的!!!

  • -F,--form <name=content>Content-Type默认为multipart/form-data。使用例子如下:

    #profile为请求参数名,@指定上传文件
    curl -F profile=@portrait.jpg https://example.com/upload.cgi
    #为part添加Content-Type,默认application/octet-stream
    curl -F "web=@index.html;type=text/html" example.com
    #更换http中显示的文件名
    curl -F "file=@localfile;filename=nameinpost" example.com
    #设置part的头字段
    curl -F "submit=OK;headers=\"X-submit-type: OK\"" example.com
    #多个part
    curl -v -F "file=@test2" -F "other=other argument" http://localhost:8080/test3
    

2.2 URL

可以指定多条url的,url最好加上引号。url未指定协议时,默认HTTP,但也会根据域名前缀猜测协议。

  • 列举

    http://site.{one,two,three}.com
    或
    http://site.one.com http://site.two.com http://site.three.com
    
  • 范围

    ftp://ftp.example.com/file[1-100].txt
    ftp://ftp.example.com/file[001-100].txt    (with leading zeros)
    ftp://ftp.example.com/file[a-z].txt
    
  • 连续

    http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
    
  • 间隔

    http://example.com/file[1-100:10].txt
    http://example.com/file[a-z:2].txt
    

三 其他选项

3.1 常用选项

输出的内容

  • -X:指定请求方法

  • -H:设置头字段

  • -i:输出包含HTTP响应头字段。

  • -v常用):输出更多的信息。>表示请求头字段,<表示响应头字段,*表示额外信息

3.2 进度条

显示传输进度,速度单位字节。进度条默认会显示出来,但是有数据显示在terminal时会被禁用。

  • 其他样式:-#,--progress-bar
  • 禁用:-s,--silent

3.3 输出到文件

输出到文件可使用

  • >:重定向
  • -o,--output <file>:指定要写入的文件
  • -O:在当前目录保存文件,文件名为远程文件名。

3.4 其他

  • 认证:指定HTTP认证方法,

    • --basicBasic认证,默认
    • 其他还有:--ntlm,--digest,--negotiate
  • 凭证

    • -b,--cookie <data>:设置cookie,默认为上次请求设置的cookie。data的格式为NAME1=VALUE1; NAME2=VALUE2
  • 其他

    • -I:仅获得头部

    • -L:如果响应要求重定向,则向新地址发起请求。

    • 其他例子:

      //下载jdk,允许重定向,以网络文件名保存在本地
      curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.tar.gz
      //向微信接口发送图片
      curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"
      
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值