可以Postman,也可以cURL.进来领略下cURL的独门绝技
文章已经收录在 Github.com/niumoo/JavaNotes ,更有 Java 程序员所需要掌握的核心知识,欢迎Star和指教。
欢迎关注我的公众号,文章每周更新。
cURL 是一个开源免费项目,主要是命令行工具 cURL 和 libcurl,cURL 可以处理任何网络传输协议,但是不涉及任何具体的数据处理。
cURL 支持的通信协议非常丰富,如 DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP, RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP,SMTPS,TELNET 以及 TFTP。查看 cURL 源代码可以访问官方 Github。
如果安装 cURL 呢?
ubuntu / Debian.
sudo apt install curl
CentOS / Fedora.
sudo yum install curl
Windows.
如果你已经安装了 Git,那么 Git Bash 自带 cURL . 如果作为开发者你 git 都没有,那么只能官方手动下载。
1. 请求源码
直接 curl 。
$ curl http://wttr.in/
上面请求的示例网址是一个天气网站,很有意思,会根据你的请求 ip 信息返回你所在位置的天气情况。

写这篇文字时我所在的上海正在下雨,窗外飘雨无休无止。
2. 文件下载
使用 -o 保存文件,类似于 wget 命令,比如下载 README 文本保存为 readme.txt 文件。如果你需要自定义文件名,可以使用 -O自定使用 url 中的文件名。
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939
下载文件会显示下载状态,如数据量大小、传输速度、剩余时间等。可以使用 -s 参数禁用进度表。
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 159 100 159 0 0 1939 0 --:--:-- --:--:-- --:--:-- 1939
$
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README -s
也可以使用 --process-bar 参数让进度表显示为进度条。
$ curl -o readme.txt https://mirrors.nju.edu.cn/kali/README --progress-bar
########################################################################################## 100.0%
cURL 作为强大的代名词,断点续传自然手到擒来,使用 -C - 参数即可。下面是断点续传下载 ubuntu20.04 镜像的例子。
$ curl -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
## 1.7%
^C
$ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
### 2.4%
^C
$ curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --progress-bar
### 2.7%
^C
$
什么?下载时不想占用太多网速?使用 --limit-rate 限个速吧。
curl -C - -O https://mirrors.nju.edu.cn/ubuntu-releases/20.04/ubuntu-20.04-desktop-amd64.iso --limit-rate 100k
什么?你又要从 FTP 服务器下载文件了?不慌。
curl -u user:password -O ftp://ftp_server/path/to/file/
3. Response Headers
使用 -i 参数显示 Response Headers 信息。使用 -I 可以只显示 Response Headers 信息。
$ curl -I http://wttr.in
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Sat, 30 May 2020 09:57:03 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 8678
Connection: keep-alive
Access-Control-Allow-Origin: *
4. 请求方式(GET/POST/...)
使用 -X 轻松更改请求方式。
$ curl -X GET http://wttr.in
$ curl -X POST http://wttr.in
$ curl -X PUT http://wttr.in
...
5. 请求参数
以传入参数 name 值为 未读代码 为例。
Get 方式参数直接url拼接参数。
$ curl -X GET http://wttr.in?name=未读代码
Post 方式使用 --data 设置参数。
$ curl -X POST --data "name=未读代码" http://wttr.in
请求时也可以自定义 header 参数,使用 --harder 添加。
$ curl --header "Content-Type:application/json" http://wttr.in
6. 文件上传
cURL 的强大远不止此,表单提交,上传文件内容也不在话下,只需要使用 -F 或者 -D参数,-F 会自动加上请求头 Content-Type: multipart/form-data ,而 -D 则是 Content-Type : application/x-www-form-urlencoded.
比如上传一个 protrait.jpg 图片。
$ curl -F profile=@portrait.jpg https://example.com/upload
提交一个具有 name 和 age 参数的 form 表单。
curl -F name=Darcy -F age=18 https://example.com/upload
参数对应的内容也可以从文件中读取。
curl -F "content=<达西的身世.txt" https://example.com/upload
上传时同时指定内容类型。
curl -F "content=<达西的身世.txt;type=text/html" https://example.com/upload
上传文件的和其他参数一起。
curl -F 'file=@"localfile";filename="nameinpost"' example.com/upload
7. 网址通配
cURL 可以实现多个网址的匹配,你可以使用 {} 结合逗号分割来标识使用 url 中的某一段,也可以使用 [] 来表示范围参数。
# 请求 www.baidu.com 和 pan.baidu.com 和 fanyi.baidu.com
$ curl http://{www,pan,fanyi}.baidu.com
# 虚构网址1-10开头的baidu.com,然后请求
$ curl http://[1-10].baidu.com
# 虚构网址a-z开头的baidu.com,然后请求
$ curl http://[a-z].baidu.com
这种方式有时候还是很有用处的,比如说你发现了某个网站的 url 规律。
8. 使用 cookie
请求时使用 -c 参数存储响应的 cookie,使用 -b 可以在请求时带上指定 cookie.
$ curl -c wdbyte_cookies http://www.wdbyte.com
$ curl -b wdbyte_cookes http://www.wdbyte.com
总结
以上就是 cURL 的常见用法了,最后告诉你一个小技巧,Chrome、Firefox 等浏览器可以直接拷贝请求为 cURL 语句。保存之后下次请求测试非常方便。

参考资料
最后的话
文章已经收录在 Github.com/niumoo/JavaNotes ,欢迎Star和指教。更有一线大厂面试点,Java程序员需要掌握的核心知识等文章,也整理了很多我的文字,欢迎 Star 和完善,希望我们一起变得优秀。
文章有帮助可以点个「赞」或「分享」,都是支持,我都喜欢!
文章每周持续更新,要实时关注我更新的文章以及分享的干货,可以关注「 未读代码 」公众号或者我的博客。

可以Postman,也可以cURL.进来领略下cURL的独门绝技的更多相关文章
- linux下curl编程
LibCurl是免费的客户端URL传输库,支持FTP,FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE ,LDAP等协议,其主页是http: ...
- Linux下CURL常用命令
下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://www.centos.org 通过-o/-O选项保存下载的文件到指定的文件中: -o:将文件保存为命令行中指定的文件 ...
- step_by_step_记录deepin下curl安装过程
记录 deepin 下 curl 安装过程 wget https://curl.haxx.se/download/curl-7.55.1.tar.gz .tar.gz cd curl-/ ./conf ...
- windows下curl的安装和简单使用
curl是利用URL语法在命令行方式下工作的开源文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. 一 ...
- linux下curl get方法传递参数
例如 url 为 http://mywebsite.com/index.php?a=1&b=2&c=3 web形式下访问url地址,使用$_GET是可以获取到所有的参数 然而在linu ...
- Windows下curl使用
一.简介 在上一篇中我们涉及到了一个在Ubuntu下使用的curl命令,而且使用这个命令来模拟server的功能来向谷歌的C2DMserver发送数据. 以下简单的来说下在Windows下相同的使用c ...
- 嵌入式 Linux下curl库API简单介绍
1:CURLcode curl_global_init(long flags); 这个函数全局需要调用一次(多次调用也可以,不过没有必要), 所以这也是把Curlplus设计成单体类的原因,curl_ ...
- CentOS7 下curl使用
curl工具工具的主页:https://curl.haxx.se/NAMEcurl - transfer a URL SYNOPSIScurl [options] [URL...] DESCRIPTI ...
- php中的curl】php中curl的详细解说
本文我来给大家详细介绍下cURL的简单的使用方法,下文我将会给大家详细介绍cURL的高级应用, cURL可以使用URL的语法模拟浏览器来传输数据, FTP, FTPS, HTTP, HTTPS, GO ...
随机推荐
- Qt之xml文件解析
XML文件简介 XML - EXtensible Markup Language,可拓展标记语言 Qt中加载XML模块 .pro 文件中添加 QT += xml Qt的XML访问方式 引用:https ...
- 基于SSM的健身房管理系统
基于SSM的健身房管理系统 The project was made in 2020-05-05~2020-05-10 谨以此片博文记录下我的第一个Java小Demo 项目展示 用户登录页 用户注册页 ...
- 【Hadoop离线基础总结】关键路径转化率分析(漏斗模型)
关键路径转化 需求 在一条指定的业务流程中,各个步骤的完成人数及相对上一个步骤的百分比 模型设计 定义好业务流程中的页面标识 Step1. /item Step2. /category Step3. ...
- Mybatis-入门演示
MyBatis:持久层框架 前言 之前有看过和学习一些mybatis的文章和内容,但是没有去写过文章记录下,现在借鉴b站的狂神视频和官方文档看来重新撸一遍入门.有错误请多指教. 内容 数据访问层-相当 ...
- vue项目-打印页面中指定区域的内容(亲测有效!)
关于打印整个页面的,没什么好说的.今天我给大家分享一个打印指定区域的方法,你想打印哪里,就打印哪里! 我也是刚刚开始接触打印这一块功能的,然后当然是找度娘深入了解了一番啦,期间试了网上的各种方法,有的 ...
- 消息队列之Kafka——从架构技术重新理解Kafka
Apache Kafka® 是 一个分布式流处理平台. 这到底意味着什么呢? 我们知道流处理平台有以下三种特性: 可以让你发布和订阅流式的记录.这一方面与消息队列或者企业消息系统类似. 可以储存流式的 ...
- react-router 4v 路由嵌套问题
嵌套的路由中,子级的Link跳转到父级时,页面无法整个渲染到父级. 原因:某一级的路由用了Router组件,导致内部Link的时候无法将整个页面渲染到“/” 解决方法:全局一个Router. 子级的兄 ...
- 在ORACLE中实现SELECT TOP N的方法----[转]
1.在ORACLE中实现SELECT TOP N 由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询. ...
- PAT-1132 Cut Integer (整数分割)
Cutting an integer means to cut a K digits long integer Z into two integers of (K/2) digits long int ...
- zoj3997网络流+数学
题目大意就是每个人都有自己喜欢的座位编号,喜欢的编号是要x的倍数就好,(1<=x<=10)一共10种情况,每种情况的人的数目不一样. 给你一个n,代表有编号1-n这n个座位,问最多能满足多 ...