[天天一命令]curl

curl,全称为CommandLine URL命令行url,是在命令行下使用url语法工做的数据传输或文件传输的工具。开发人员常常使用它来调试接口或者下载文件。curl官网:curl.haxx.se/html

接下来咱们将使用curl发送请求,并使用wireshark工具抓包分析每一条命令的内容。wireshark不了解的能够看文章底部,个人参考资料。jquery

curl命令格式为: curl [options...] <url> 能够查看curl的帮助以下图: linux

curl

如下列举curl经常使用和炫酷的一些功能,不经常使用的请本身网上搜索。 使用-v选项能够查看curl发送请求的过程json

不带选项的get请求

curl http://www.baidu.com 执行命令后,至关于使用get请求访问了百度首页,wireshark抓到的包以下,User-Agent为curl/7.49: 浏览器

wireshark
命令返回结果为百度的首页:
百度首页

保存、下载文件

curl -o baidu.html http://www.baidu.com -o(小写):能够将返回的结果保存到文件。固然也可使用linux的>>重定向。 以下图,用浏览器打开下载后的文件,就是百度的首页。 bash

baidu

重定向

当一个被请求页面移动到另外一个站点时,curl默认不会自动重定向,使用-L选项会发送一个HTTP Loaction header做为请求,而后将请求重定向到新的地址上。以下,curl http://www.jianshu.com访问简书会提示已经重定向,咱们加上-L选项,curl会重定向到正确的地址。 curl -L http://www.jianshu.com 服务器

301重定向

post请求-x-www-form-urlencoded

post请求使用-d后面接post数据,默认的post请求编码为application/x-www-form-urlencoded,以下,往w3c的post测试网址 https://www.w3school.com.cn/example/jquery/demo_test_post.asp 发送post参数name和city,其会返回问候信息。 curl -d "name=huang&city=guangzhou" https://www.w3school.com.cn/example/jquery/demo_test_post.asp cookie

post请求
以上w3c的网址是https,我改成fiddler安装证书使用代理抓https的包时报错,记录在此,之后深刻学习https在来解决,报错以下
https抓取报错

post请求-json格式

post请求有多种编码格式,常有的有上面默认的x-www-form-urlencoded,仍是RESTFul风格接口常常使用的json传输。curl post json数据须要加请求头和数据。 curl -H 'Content-Type:application/json' -d '{"name":"huang"}' http://www.example.com -H表示请求头,若是有多个请求头,可使用多个-H指定,-d表示数据。app

http动词

RESTFul风格的网站,通常除了get,post外,会设置多种http动词,如put,delete等,curl使用选项-X(大写)能够指定特定的动词。 curl -X DELETE http://www.example.comcurl

模拟浏览器-User-Agent

模拟Chrome浏览器可使用-A后面接User-Agent字符串: curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" http://www.baidu.com 以下,wireshark抓包后,User-Agent确实修改了。

User-Agent

使用代理

curl -x 127.0.0.1:8888 http://www.google.com 使用代理服务器127.0.0.1:8888访问。以下,若是不使用代理,访问不到google,使用代理后,能够获取到数据。

google
结果以下,由于我使用的是韩国的代理服务器,因此返回的google首页是韩文。
google
此次走代理服务器,wireshark没有抓到http的包。

头部信息-cookie

curl不加选项的话,默认使用get请求输出返回的内容,若是须要保存请求头的信息,则要添加选项。 保存cookie,选项-c(小写):curl -c cookie.txt http://www.baidu.com 使用cookie,选项-b:curl -b cookie.txt http://www.baidu.com

头部信息-header

若是须要保存全部头部信息,以下。 curl -D http://www.baidu.com

分段下载合并

使用-r能够分段下载内容,最后用cat命令能够将分段的内容合并。以下,我将百度页面分为两部分下载,前0-1000字节为第一部分,剩下的为另外一部分。下载完后合并。图片同理。

# 分段下载
curl -r 0-1000 -o baidu_1.html http://www.baidu.com
curl -r 1000- -o baidu_2.html http://www.baidu.com
# 合并文件 
cat baidu* > baidu.html
复制代码

以下,第一部分只有一个百度的搜索框,将两部分合并后就是一个完整的百度首页了。

百度首页第一部分
-r选项的原理是使用了http请求头Range,wireshark抓包以下。
Range

参考资料

  1. curl:blog.csdn.net/deliciousio…
  2. wireshark:www.cnblogs.com/linyfeng/p/…
  3. post请求编码:imququ.com/post/four-w…
  4. curl使用post请求:ifttl.com/send-http-p…
相关文章
相关标签/搜索