当前位置: 首页 > news >正文

Linux下curl命令的使用

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.curl

     简单来说,curl是一个用url方式,来和服务器进行文件传输和下载的工具。它不仅仅支持Http协议,还支持了其他的众多的协议,例如DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP等。

 

2.curl工具格式和重要的选项

格式:

[plain] view plain copy

 

  1. curl [options] [URL...]  

重要选项:

[html] view plain copy

 

  1. -X method, --request method       #指定使用http的method,有GET/POST/PUT/DELETE等等,默认是GET方法  
  2. -d key=value, --data key=value    #指定HTTP请求中请求数据段,例如HTTP POST请求时需要传递给服务器的数据,一个curl命令中,可以用多个-d选项,curl会将他们合并成key1=value1&key2=value2…  
  3. --data-urlencode key=value        #类似于-d key=value,但是会经过URL编码  
  4. -F key=value, --form key=value    #模拟向服务器提交表单form数据,curl会用multipart/form-data的格式传递给服务器,而-d选项使用的是applica-tion/x-www-form-urlencoded,一个crul命令中,同样可以有多个-F选项  
  5. -e url, --referer url             #在curl发起的http请求的请求头中,设置referer信息,向目标请求站点说明本次的http请求是来自那个http页面  
  6. -H <header>, --header <header>    #为http请求设置请求头信息,例如,--header "Content-Type:application/json" -H Host:www.baididu.com  
  7. -A <agent string>, --user-agent<agent string>   #为http请求设置user-agent信息,这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页  
  8. -u <user:password;options>, --user<user:password;options>   #为http请求设置用户名和密码  
  9. -o filename        #将curl返回的请求结果,写入到filename文件中  
  10. -b <namename=data>, --cookie<namename=data>, -b <cookie-file>, --cookie <cookie-file>  #为curl的http请求携带cookies信息,可以在命令行用key=value设置,也可以从一个文件中读取  
  11. -c <cookie-file>, --cookie-jar <cookie-file>      #将服务器返回的cookie信息写入到本地文件中  
  12. -v, --verbose          #显示curl的http请求的通信过程,直接打印到终端上  
  13. --trace <file>         #将curl的http请求通信过程写入到文件中  
  14. --trace-ascii <file>   #同--trace <file>类似,将curl的http请求通信过程写入到文件中  
  15. -I           #只输出HTTP响应报文的头部  
  16. -i           #输出HTTP响应报文的头部以及响应正文  
  17. -s           #让curl开启静默模式,即不输出进度或错误等信息  
  18. -L           #如果服务端返回3XX重定向,curl会继续向新地址发送请求  
  19. -x ip:port   #设置http请求的代理服务器,若端口不指定,默认为1080  

 

3.curl使用的例子

 

[html] view plain copy

 

  1. curl http://www.example.com  
  2. curl -o sina.output http://www.example.com  
  3. curl -s -o /dev/null http://www.example.com  
  4. curl -v http://www.example.com  
  5. curl --trace output.txt http://www.example.com  
  6. curl http://example.com/form.cgi?data=xxx  
  7. curl -X POST --data "data=xxx" http://example.com/form.cgi  
  8. curl -X POST --data-urlencode "date=April 1" http://example.com/form.cgi  
  9. curl --referer http://www.example.com http://www.example.com  
  10. curl --form upload=@localfilename --form press=OK http://www.example.com  #利用curl上传文件  
  11. curl --cookie "name=xxx" www.example.com  
  12. curl --header "Content-Type:application/json" http://example.com  
  13. curl -X PUT -H "Accept: application/json" http://example.com/v1/user/add --basic -u user:passwd \  
  14.      -F proto_file=@task.proto                                          \  
  15.      -F message_name="adduser"                                          \  
  16.      -F host=hostname                                                   \  
  17.      -F part_count=4                                                    \  
  18.      -F replication=5                                                   \  
  19.      -F part_rule=MOD                                                   \  
  20.      -F cpu_num=20                                                      \  
  21.      -F mem_mb=10000                                                    \  
  22.      -F disk_mb=10000                                                   \  
  23.      -F token_pattern="token"                                           \  
  24. curl -I -H "Host:www.example.com" www.example.com  

 

备注:狭义地说,curl像是一个浏览器,但是比浏览器的支持的东西要多,因为它不仅支持Http协议,还支持其他很多的协议。

 

4.关于使用curl命令的-d参数携带HTTP request的请求体(request body)的一些问题
HTTP Requset请求头中的Content-Type是用来说明请求体的MIME类型的,默认是application/x-www-form-urlencoded类型。curl -d参数是用携带POST/PUT请求的请求体内容的,有如下几种支持的格式:
(1)

[plain] view plain copy

 

  1. curl -d "param1=value1&param2=value2" -X POST http://localhost:3000/data  

备注:Content-Type缺省为application/x-www-form-urlencoded,所以使用param1=value1&param2=value2格式时,可省略。
(2)

[plain] view plain copy

 

  1. curl -d "param1=value1&param2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:3000/data  

备注:使用param1=value1&param2=value2格式时,也可以显式地指出application/x-www-form-urlencoded.
(3)

[plain] view plain copy

 

  1. curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:3000/data  

备注:使用json格式的数据,一定要显式地指明Content-Type为application/json.
(4)

[plain] view plain copy

 

  1. curl -d "@data.txt" -X POST http://localhost:3000/data  

备注:将param1=value1&param2=value2格式的数据单独放入文件,然后通过-d "@filename"来引入
(5)

[plain] view plain copy

 

  1. curl -d "@data.json" -H "Content-Type: application/json" -X POST http://localhost:3000/data  

备注:将json格式的数据单独放入文件,然后通过-d "@filename"来引入

转载于:https://my.oschina.net/u/588516/blog/1584489

相关文章:

  • JAVA 集合框架
  • CentOS6.x安装memcached-1.5.x
  • spring boot整合mybatis+mybatis-plus
  • Android 3.1 r1 API中文文档(6)——ImageView
  • 招聘网工:内推性质
  • 事件之道~一 如何让实体发生更新时,同时记录它更新的内容到日志表
  • 如何在最段的时间内让搜索引擎收录一个新网站?
  • 云上数据安全,初识数据库审计
  • Android 中文API (33) —— Checkable
  • Jexus~mono中使用StackExchange.redis的问题
  • ios开发之--textview意见反馈页面(占位label,字数统计,提交按钮的交互设置)...
  • 谈谈转行
  • [Spark][Python]DataFrame中取出有限个记录的例子
  • ORM规范API通用格式及禁止联表查询方案实现ORM
  • swift基础学习(九)
  • 【剑指offer】让抽象问题具体化
  • 0基础学习移动端适配
  • Bytom交易说明(账户管理模式)
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java小心机(3)| 浅析finalize()
  • jquery ajax学习笔记
  • leetcode讲解--894. All Possible Full Binary Trees
  • v-if和v-for连用出现的问题
  • 基于web的全景—— Pannellum小试
  • 将 Measurements 和 Units 应用到物理学
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 区块链技术特点之去中心化特性
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用SAX解析XML
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 正则与JS中的正则
  • 阿里云ACE认证之理解CDN技术
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​VRRP 虚拟路由冗余协议(华为)
  • #define,static,const,三种常量的区别
  • #laravel 通过手动安装依赖PHPExcel#
  • #stm32驱动外设模块总结w5500模块
  • #stm32整理(一)flash读写
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $GOPATH/go.mod exists but should not goland
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C++17) std算法之执行策略 execution
  • (C语言)fgets与fputs函数详解
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (NSDate) 时间 (time )比较
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一) springboot详细介绍
  • (已解决)什么是vue导航守卫
  • (转)iOS字体
  • (转)scrum常见工具列表
  • (转)全文检索技术学习(三)——Lucene支持中文分词