zoukankan      html  css  js  c++  java
  • Curl运维命令

    在Linux系统中,curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载操作,是综合传输工具,习惯上称url为下载工具。下面就日常运维中基于curl命令使用做下总结(用法详解指南):

    一、Curl命令用法

    1.  curl语法和参数选项
    # curl [option] [url]

    curl常见参数

    -a/--append                           上传文件时,附加到目标文件
    -A/--user-agent <string>              设置用户代理发送给服务器
    -b/--cookie <name=string/file>        cookie字符串或文件读取位置
    -c/--cookie-jar <file>                操作结束后把cookie写入到这个文件中
    -C/--continue-at <offset>             断点续转
    -D/--dump-header <file>               把header信息写入到该文件中
    -e/--referer                          来源网址
    -f/--fail                             连接失败时不显示http错误
    -o/--output                           把输出写到该文件中
    -O/--remote-name                      把输出写到该文件中,保留远程文件的文件名
    -r/--range <range>                    检索来自HTTP/1.1或FTP服务器字节范围
    -s/--silent                           静音模式。不输出任何东西
    -T/--upload-file <file>               上传文件
    -u/--user <user[:password]>           设置服务器的用户和密码
    -w/--write-out [format]               什么输出完成后
    -x/--proxy <host[:port]>              在给定的端口上使用HTTP代理
    -#/--progress-bar                     进度条显示当前的传送状态。或者直接使用"--progress"
    

    2.  curl使用说明
    curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。它支持多种协议,下面说下curl命令的日常使用示例:

    1)获取页面内容,即查看网页源码  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    当不加任何option使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出
    [root@ss-server ~]# curl https://www.baidu.com
     
    2)显示http头部信息,即只打印响应头部信息  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    如果只想要显示 HTTP 头,而不显示文件内容,可以使用 -I 或 --head 选项
    [root@ss-server ~]# curl --head https://www.baidu.com
    [root@ss-server ~]# curl -I https://www.baidu.com
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    Connection: Keep-Alive
    Content-Length: 277
    Content-Type: text/html
    Date: Mon, 23 Dec 2019 10:50:55 GMT
    Etag: "575e1f6f-115"
    Last-Modified: Mon, 13 Jun 2016 02:50:23 GMT
    Pragma: no-cache
    Server: bfe/1.0.8.18
     
    如果想要同时显示 HTTP 头和文件内容,使用 -i 选项
    [root@ss-server ~]# curl -i https://www.baidu.com  
     
    注意:
    "-I"参数则是只显示http response的头信息。
    "-i"参数可以显示http response的头信息,连同网页代码一起。
     
    3)显示通信过程  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    "-v"参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。
    [root@ss-server ~]# curl -v www.sina.com
     
    如果觉得上面的信息还不够,可以使用下面的命令查看更详细的通信过程。
    [root@ss-server ~]# curl --trace output.txt www.sina.com
    或者
    [root@ss-server ~]# curl --trace-ascii output.txt www.sina.com
    运行后,可以打开output.txt文件查看。
     
    4)下载页面  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    curl命令可以用来执行下载、发送各种HTTP请求,指定HTTP头部等操作。如果系统没有curl可以使用"yum install curl"安装,也可以下载安装。
    curl是将下载链接输出到stdout,将进度信息输出到stderr。
    --silent选项:表示不显示进度条信息
    --progress选项:表示显示进度条信息。或者使用"-#",或者使用"--progress-bar"
     
    [root@ss-server ~]# curl --silent https://www.baidu.com
    这条命令是将下载链接输出到终端,所有下载的数据都被写入到stdout。
     
    还可以将下载的链接保存到文件
    可以使用 > 符号将输出重定向到本地文件中。
    [root@ss-server ~]# curl --silent https://www.baidu.com > haha.txt
     
    -o(小写的 o):结果会被保存到命令行中提供的文件名
    -O(大写的 O):URL 中的文件名会被用作保存输出的文件名
     
    [root@ss-server ~]# curl https://www.baidu.com -o baobei.txt --progress
    [root@ss-server ~]# curl --silent -O https://www.baidu.com/haha.html
     
    需要注意:
    使用 -O 选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。
    如果遇到链接中无文件名的情况,应该使用 -o 选项手动指定文件名,或使用重定向符号。
     
    5)同时下载多个页面  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    以使用 -o 或 -O 选项来同时指定多个链接,按照以下格式编写命令:
    [root@ss-server ~]# curl -O https://www.baidu.com/haha/page1.html -O https://www.baidu.com/haha/page2.html
     
    或者:
    [root@ss-server ~]# curl -o page1 https://www.baidu.com/haha/page1.html -o page2 https://www.baidu.com/haha/page2.html
     
    6)使用-L跟随链接重定向,即自动跳转  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    如果直接使用curl打开某些被重定向后的链接,这种情况下就无法获取想要的网页内容。
    使用"-L"参数,curl就会自动跳转到新的网址。
    [root@ss-server ~]# curl http://kevin.com
    会得到如下信息:
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx/1.10.3</center>
    </body>
    </html>
     
    而当通过浏览器打开该链接时,会自动跳转到 http://www.kevin.com。
    此时如果想要curl做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。
    这时就需要在命令中添加-L选项来跟随链接重定向,这样就能获取到经过重定向后的网页内容了。
    [root@ss-server ~]# curl -L http://kevin.com
     
    7)断点续传  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    偏移量是以字节为单位的整数,如果让curl自动推断出正确的续传位置使用-C -:
    # curl -C - URL
    [root@ss-server ~]# curl -C - https://www.baidu.com
     
    8)提供Referer字段,设置参照页字符串  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    参照页是位于HTTP头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的。
    如果用户点击网页A中的某个连接,那么用户就会跳转到B网页,网页B头部的参照页字符串就包含网页A的URL。
     
    使用--referer选项指定参照页字符串,即查看来源网址。
    有时需要在http request头信息中,提供一个referer字段,表示你是从哪里跳转过来的。
    [root@ss-server ~]# curl --referer https://www.baidu.com https://www.baidu.com
     
    9)设置cookies  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    当使用curl访问页面的时候,默认是不会保存 Cookie 的。有些情况下我们希望保存 Cookie 以便下次访问时使用。例如登陆了某个网站,我们希望再次访问该网站时保持登陆的状态,这时就可以现将登陆时的 Cookie 保存起来,下次访问时再读取。
     
    使用--cookie "COKKIES"选项来指定cookie,多个cookie使用分号分隔:
    # curl --cookie "name=xxxx" www.example.com
    # curl --cookie "name=xxxx;age=xxxx;address=xxxx" www.example.com
     
    如下命令,表示将url中的user和pass内容发送给了cookie
    [root@ss-server ~]# curl https://www.baidu.com --cookie "user=root;pass=123456"
     
    至于具体的cookie的值,可以从http response头信息的'Set-Cookie'字段中得到。
     
    如果想要将cookie另存为一个文件,使用--cookie-jar选项,即-c参数。
    '-c cookie-file'可以保存服务器返回的cookie到文件;
    '-b cookie-file'可以读取这个文件作为cookie信息,进行后续的请求。
     
    [root@ss-server ~]# curl --cookie-jar cookie_txt https://www.baidu.com
    [root@ss-server ~]# curl -c cookie_txt https://www.baidu.com
     
    [root@ss-server ~]# curl -b haha.txt https://www.baidu.com
     
    10)自定义User-Agent字段,设置用户代理字符串  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页。
     
    有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。
    使用--user-agent或者-A选项自定义用户代理,命令如下:
    # curl URL --user-agent "Mozilla/5.0"
    # curl URL -A "Mozilla/5.0"
    [root@ss-server ~]# curl https://www.baidu.com --user-agent "Mozilla/5.0"
     
    例如下面的命令将伪装成安卓火狐浏览器对网页进行请求(使用-H也可以实现同样的目的,见下面说明):
    [root@ss-server ~]# curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com
     
    11)使用 -H 自定义 header  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    当使用curl访问页面,需要传递特定的header的时候,可以仿照以下命令来写:
    [root@ss-server ~]# curl -H "Referer: www.example.com" -H "User-Agent: Custom-User-Agent" http://www.baidu.com
    可以看到,当使用-H 来自定义User-Agent时,需要使用 "User-Agent: xxx"的格式。-H可以传递多个Header头部信息
     
    也能够直接在 header 中传递 Cookie,格式与上面的例子一样(指定cookie的其他方式已在上面介绍过):
    [root@ss-server ~]# curl -H "Cookie: JSESSIONID=D0112A5063D938586B659EF8F939BE24" http://www.example.com
     
    12)curl的带宽控制和下载配额  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    使用--limit-rate限制curl的下载速度,如下命令中用k(千字节)和m(兆字节)指定下载速度限制。
    [root@ss-server ~]# curl https://www.baidu.com --limit-rate 50k
    [root@ss-server ~]# curl https://www.baidu.com --limit-rate 5m
     
    使用--max-filesize指定可下载的最大文件大小。
    如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。
    # curl URL --max-filesize bytes
    [root@ss-server ~]# curl https://www.baidu.com --max-filesize 10000
     
    13)用curl进行认证  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码:
    # curl -u user:pwd http://man.linuxde.net
    # curl -u user http://man.linuxde.net
     
    如下,登录这个页面需要输入用户名和密码,可以使用-u参数进行认证
    [root@ss-server ~]# curl -u kevin:wanhju1980@123 https://account.cnblogs.com/signin?returnUrl=http%3a%2f%2fi.cnblogs.com%2f
    或者:
    [root@ss-server ~]# curl -u kevin https://account.cnblogs.com/signin?returnUrl=http%3a%2f%2fi.cnblogs.com%2f
    Enter host password for user 'kevin':
     
    14)发送表单信息
    发送表单信息有GET和POST两种方法。
    GET方法相对简单,只要把数据附在网址后面就行(http://可以省略)。
    [root@ss-server ~]# curl example.com/form.cgi?data=xxx
    [root@ss-server ~]# curl http://example.com/form.cgi?data=xxx
     
    POST方法必须把数据和网址分开,curl就要用到--data参数或-d参数。
    [root@ss-server ~]# curl -X POST --data "data=xxx" http://example.com/form.cgi
    [root@ss-server ~]# curl -X POST -d "data=xxx" http://example.com/form.cgi
     
    如果数据没有经过表单编码,还可以让curl为你编码,参数是"--data-urlencode"
    [root@ss-server ~]# curl -X POST --data-urlencode "date=April 1" example.com/form.cgi
     
    再来看下面一个例子:
    ############  使用-d发送POST请求  ############
    以登陆网页为例来进行说明使用curl发送POST请求的方法。
    假设有一个登录页面www.example.com/login,只需要提交用户名和密码便可登录。
    则可以使用 cURL 来完成这个POST请求。
    -d 用于指定发送的数据,相当于--date
    -X 用于指定发送数据的方式:
    [root@ss-server ~]# curl -d "userName=kevin&passwd=123456" -X POST http://www.example.com/login
     
    在使用-d的情况下,如果省略 -X,则默认为 POST 方式:
    [root@ss-server ~]# curl -d "userName=kevin&passwd=123456" http://www.example.com/login
     
    ############  强制使用GET方式  ############
    # curl -d "somedata" -X GET http://www.example.com/api
    或者使用 -G 选项:
    # curl -d "somedata" -G http://www.example.com/api
     
    GET方法只要把数据附在网址后面就行。
    # curl example.com/form.cgi?data=xxx
     
    curl默认的HTTP动词是GET,使用-X参数可以支持其他动词。例如:
    # curl -X DELETE
     
    ############  从文件中读取data  ############
    # curl -d "@data.txt" http://www.example.com/login
     
    ############  带Cookie登录  ############
    如果再次访问该网站,仍然会变成未登录的状态。可以用之前提到的方法保存 Cookie,在每次访问网站时都带上该 Cookie 以保持登录状态。
    '-c cookie-file'可以保存服务器返回的cookie到文件;
    [root@ss-server ~]# curl -c "cookie-login" -d "userName=tom&passwd=123456" http://www.example.com/login
     
    再次访问该网站时,使用以下命令:
    '-b cookie-file'可以读取这个文件作为cookie信息,进行后续的请求。
    [root@ss-server ~]# curl -b "cookie-login" http://www.example.com/login
    这样,就能保持访问的是登录后的页面了。
     
    15)HTTP动词  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    curl默认的HTTP动词是GET,使用`-X`参数可以支持其他动词。
    [root@ss-server ~]# curl -X POST www.example.com
    [root@ss-server ~]# curl -X DELETE www.example.com
    

    3.  curl上传文件的用法(POST请求方式)
    一般来说,我们都会用curl下载网页,但是curl上传文件则不常用。下面说下curl模拟"multipart/form-data"形式的form上传文件, 命令稍稍复杂些。

    之前的请求基本都是只传输字符串,如果需要上传文件,比如在测试上传接口的时候,会要求传输文件,其实这个对于curl来说,也是很容器的!
    使用-F "file=@__FILE_PATH__" 的请示,传输文件即可。
    
    [root@ss-server ~]# curl -F "filename=@/data/www/test.tar.gz" http://localhost:9090/action.php 
    [root@ss-server ~]# curl localhost:8000/api/v1/upimg -F "file=@/Users/fungleo/Downloads/401.png" -H "token: 222" -v
    
    如果使用了-F参数,curl就会以 multipart/form-data 的方式发送POST请求。
    -F参数以name=value的方式来指定参数内容,如果是一个文件,则需要以name=@file的方式来指定。
    
    如果通过代理,上面的命令有可能会被代理拒绝,这时需要指定上传文件的MIME媒体类型。命令如下:
    -x参数:在给定的端口上使用HTTP代理。相当于--proxy
    [root@ss-server ~]# curl -x kevin.com:1080 -F "filename=@/data/www/test.tar.gz;type=application/octet-stream" http://localhost:9090/action.php
    
    此外,如果不上传文件,则可以使用"-d"参数,这时curl会以application/x-www-url-encoded 方式发送 POST 请求。命令如下:
    [root@ss-server ~]# url -d "action=del&name=archer" -d "id=12" http://localhost:9090/action.php

    4.  curl常用示例

    ############ 常规访问 ############
    # curl http://www.baidu.com
    
    ############ 文件名正则 ############
    # curl ftp://ftp.baidu.cn/file[1-100].txt   
    # curl ftp://ftp.baidu.cn/file[001-100].txt  
    # curl ftp://ftp.baidu.cn/file[a-z].txt  
    # curl ftp://ftp.baidu.cn/file[a-z:2].txt  
    
    ############ 域名正则 ############
    # curl http://site.{one,two,three}.com  
    
    ############ 目录正则 ############
    # curl http://www.baidu.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html  
    
    ############ 常规下载页面 ############
    # curl -o index.html http://www.baidu.com/  
    # curl http://www.baidu.com/ > index.html  
    
    ############ 添加下载进度条 ############
    # curl -# http://www.baidu.com/   > index.html  
    # curl --progress http://www.baidu.com/   > index.html 
    # curl --progress-bar http://www.baidu.com/   > index.html 
    
    ############ 使用不同的版本的http协议 ############
    默认1.0版本
    # curl -0 http://www.baidu.com  
    
    指定版本
    # curl --http1.1 http://www.baidu.com
    # curl --http2 http://www.baidu.com  
    
    ############ 使用不同的ssl版本访问 ############
    tlsv1
    # curl -1 http://www.baidu.com  
    # curl --tlsv1 http://www.baidu.com
    
    sslv2
    # curl -2 http://www.baidu.com  
    # curl --sslv2 http://www.baidu.com
    
    sslv3
    # curl -3 http://www.baidu.com  
    # curl --sslv3 http://www.baidu.com
    
    ############ 使用不同的ip协议 ############
    ipv4
    # curl -4 http://www.baidu.com  
    # curl --ipv4 http://www.baidu.com
    
    ipv6
    # curl -6 http://www.baidu.com  
    # curl --ipv6 http://www.baidu.com
    
    ############ 指定user-agent ############
    # curl -A "wget/1.0" http://www.baidu.com  
    # curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"  http://www.baidu.com  
    # curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)"  http://www.baidu.com  
    
    ############ 指定cookie ############
    # curl -b "phpsession=Testtest" http://www.baidu.com  
    # curl --cookie "name=Daniel" http://www.baidu.com  
    
    ############ 指定cookie文件 ############
    # curl -c cookies.txt http://www.baidu.com  
    # curl --cookie-jar cookies.txt http://www.baidu.com  
    
    ############ 提交post数据 ############
    # curl -d "username=admin&password=pass" http://www.baidu.com  
    # curl --data "birthyear=1905&press=%20OK%20"  http://www.baidu.com/when.cgi
    # curl --data-urlencode "name=I am Daniel" http://curl.haxx.se
    # curl --data "<xml>" --header "Content-Type: text/xml" --request PROPFIND url.com
    
    ############ 指定referer ############
    # curl -e "http://www.baidu.com/referer" http://www.baidu.com  
    # curl --referer http://www.baidu.com/referer http://www.baidu.com  
    
    ############ 指定header ############
    # curl --header "Host:www.baidu.com" http://www.baidu.com  
    
    ############ 显示访问网页的header ############
    # curl -D - http://www.baidu.com  
    # curl --dump-header headers_and_cookies http://www.baidu.com
    
    ############ 跟随location跳转页面 ############
    # curl -L http://www.baidu.com
    # curl --location http://www.baidu.com
    
    ############ 指定dns访问网站 ############
    # curl --dns-servers 8.8.8.8 http://www.baidu.com
    
    ############ 指定证书访问https的网页 ############
    # curl --cert mycert.pem https://www.baidu.com
    
    
    #############################################################################################
    运维工作中常见的curl命令操作
    #############################################################################################
    1)抓取页面内容到一个文件中
    # curl -o home.html http://www.kevin.net/bobo218558
    
    正则匹配下载,比如下载后的文件001-nick.JPG
    # curl -o #2_#1.jpg http://www.kevin.net/bobo218558/{zzh,nick}/[001-201].JPG
    
    2)用-O,后面的url要具体到某个文件,不然抓不下来
    # curl -O http://www.kevin.net/bobo218558/dd.jpg
    
    3)模拟表单信息,模拟登录,保存cookie信息
    # curl -c ./cookie_c.txt -F log=aaaa -F pwd=****** http://www.kevin.net/bobo218558
    
    4)模拟表单信息,模拟登录,保存头信息
    # curl -D ./cookie_D.txt -F log=aaaa -F pwd=****** http://www.kevin.net/bobo218558
    -c(小写)产生的cookie和-D里面的cookie是不一样的。
    
    5)使用cookie
    # curl -b ./cookie_c.txt http://www.kevin.net/bobo218558
    # curl http://www.kevin.net/bobo218558 –cookie "user=root;pass=123456" 多个用;分开
    
    6)断点续传,-C(大写的)
    # curl -C - https://www.baidu.com
    
    7)传送数据,最好用登录页面测试,因为你传值过去后,curl回抓数据,你可以看到你传值有没有成功
    # curl -d log=aaaa http://www.kevin.net/bobo218558
    
    8)显示抓取错误。
    # curl -f http://www.kevin.net/bobo218558
    
    9)伪造来源地址,有的网站会判断,请求来源地址。
    # curl -e http://www.kevin.net/bobo218558 http://www.kevin.net/bobo218558
    
    10)当经常用curl去访问别人网址的时候,人家会把你的IP给屏蔽掉的,这个时候,我们可以用代理
    # curl -x 24.10.28.84:32779 -o home.html http://www.kevin.net/bobo218558
    
    11)比较大的东西,我们可以分段下载
    # curl -r 0-100 -o img.part1 http://www.kevin.net/bobo218558
    # ls |grep part | xargs du -sh
    用的时候,把他们cat一下就OK了
    # cat img.part* >img.jpg
    
    12)不会显示下载进度信息(-s 等于 --silent)
    # curl -s -o aaa.txt https://www.baidu.com
    
    13)显示下载进度条
    # curl -# -O https://www.baidu.com/test.html
    
    14)通过ftp下载文件
    # curl -u 用户名:密码 -O http://www.kevin.net/bobo218558
    或者用下面的方式
    # curl -O ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/style.css
    
    15)通过ftp上传
    # curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/
    
    16)使用–limit-rate限制curl的下载速度
    # curl http://www.kevin.com/har/test –limit-rate 50k 
    命令中用k(千字节)和m(兆字节)指定下载速度限制。
    
    17) 使用--max-filesize指定可下载的最大文件大小
    # curl http://www.kevin.com/har/test --max-filesize 10000 
    如果文件大小超出限制,命令则返回一个非0退出码,如果命令正常则返回0。
    
    18)使用curl选项 -u 可以完成HTTP或者FTP的认证,可以指定密码,也可以不指定密码在后续操作中输入密码
    # curl -u user:pwd http://www.kevin.net/bobo218558
    # curl -u user http://www.kevin.net/bobo218558
    
    19)通过-I或者-head可以只打印出HTTP头部
    # curl -I http://www.kevin.net/bobo218558
    
    20)有些网站访问会提示只能使用IE浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。
    使用–user-agent或者-A选项
    # curl http://********* --user-agent "Mozilla/5.0"
    # curl http://********* -A "Mozilla/5.0"
    
    21)其他HTTP头部信息也可以使用curl来发送,使用-H"头部信息" 传递多个头部信息
    # curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" http://***********
    以json 格式请求
    # curl -H "Content-Type: application/json" -X POST --data '{"data":"1"}' http://127.0.0.1/
    
    22)一个服务器端常用的限制方法,就是检查http访问的referer。
    比如你先访问首页,再访问里面所指定的下载页,这第二次访问的 referer地址就是第一次访问成功后的页面地址。
    这样,服务器端只要发现对下载页面某次访问的referer地址不是首页的地址,就可以断定那是个盗链了。
    curl给我们提供了设定referer的option: -e
    # curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -x 113.114.115.6:1080 -e "mail.linuxidc.com" -o page.html -D cookie0001.txt http://www.kevin.com
    
    22)输出完成后自定义打印信息
    # curl -w '{
    "time_namelookup": %{time_namelookup},
    "time_connect": %{time_connect},
    "time_appconnect": %{time_appconnect},
    "time_pretransfer": %{time_pretranfer},
    "time_redirect": %{time_redirect},
    "time_starttransfer": %{time_starttransfer},
    "time_total": %{time_total},
    "speed_download": %{speed_download},
    "speed_upload": %{speed_upload},
    "remote_ip": "%{remote_ip}",
    "remote_port": "%{remote_port}",
    "local_ip": "%{local_ip}",
    "local_port": "%{local_port}"
    }' -D /tmp/tmpOUQ_P_ -o /tmp/tmpAUjoDh -s -S 'http://www.kevin.net/bobo218558/search/universal/v2?m=s&query=is_list=1%26info_type=1%26info_source=1%26size=20'
    

    5. curl命令的超时时间

    curl命令有两个超时时间:一个是连接超时时间,另一个是整个过程允许的最大时间!
    
    --connect-timeout <seconds>
    这个是指定连接超时时间。 如果出错, 提示形如:curl: (28) connect() timed out!   比如命令"curl --connect-timeout 10 ......"
    
    -m/--max-time <seconds>
    这个是指定整个过程最大的允许时间。 出错提示如:curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received!  比如命令"curl -m 60 ......."
    
    除此之外,curl命令还可以这样使用:
    # curl -o kevin.log "http://www.ru.com" --speed-time 5 --speed-limit 1
    表示将url内容保存到kevin.log中, 如果传输速度小于1字节/秒的状态持续5秒,该连接就会终止.

    二、Curl的GET、POST、PUT、DELETE请求

    1.  GET、POST、PUT、DELETE含义与区别

    ############ 简单的来理解 ############
    GET     /uri/xxx   查看(相当于数据库中的select操作),即通过请求URL获得资源。
    PUT     /uri/xxx   更新/创建(相当于数据库中的update操作),即通过请求URL修改某个内容。
    POST    /uri       创建 (相当于数据库中的insert操作),即通过请求URL添加新的资源,用于表单提交。
    DELETE  /uri/xxx   删除 (相当于数据库中的delete操作),即通过请求URL删除某个内容。
     
    ############ 含义 ############
    1)GET请求:得到或查看数据
    GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容。
    也就是说GET请求不会产生副作用。无论进行多少次操作,结果都是一样的。
     
    2)PUT请求:在已经存在的数据上更新数据
    与GET请求不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等。
    也就是说无论进行多少次PUT操作,其结果并没有不同。
     
    3)POST请求:创建数据
    POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。
    几乎目前所有的提交操作都是默认用POST请求的。
     
    4)DELETE请求:删除数据
    DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。
     
    ############ 安全性方面 ############
    1)GET请求的操作是安全的。
    所谓安全是指不管进行多少次操作,资源的状态都不会改变。比如用GET请求方式浏览文章,不管浏览多少次,那篇文章还在那,没有变化。
    当然有人可能会说每浏览一次文章,文章的浏览数就增加一次,这不也改变了资源的状态么。
    其实这并不矛盾,因为这个改变不是GET操作引起的,而是用户自己设定的服务端逻辑造成的。
     
    2)PUT,DELETE请求的操作是幂等的。  
    所谓幂等:是指无论进行多少次重复操作,都是实现相同的结果。也就是说若输入相同的参数执行任意次结果相同,则为等幂操作!!!!
    比如我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。
    顺便说一句,因为GET操作是安全的,所以它自然也是幂等的。
     
    3)POST操作既不是安全的,也不是幂等的
    比如常见的POST重复加载问题:当多次发出同样的POST请求后,其结果是创建出了若干的资源。
     
    4)安全和幂等的意义在于:
    当操作没有达到预期的目标时,我们可以不停的重试,而不会对资源产生副作用。从这个意义上说,POST操作往往是有害的,但很多时候我们还是不得不使用它。
     
    5)需要注意事项
    创建操作可以使用POST请求,也可以使用PUT请求!区别在于:
    POST 是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx)。
    再通俗点说,如果URL可以在客户端确定,那么就使用PUT请求,如果是在服务端确定,那么就使用POST请求。
    比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST请求方法了。
    
    所以,简单总结下:
    GET,POST,PUT都是幂等性操作,而POST不是幂等性操作;
    GET:不管对资源查询多少次,此实现都是一样的
    PUT:将A第一次修改成B,再进行多次操作,最终结果还是还算B,与第一次写的结果是一样的,所有PUT是
    DELETE:第一次把资源删除以后,后面进行多少次操作都算资源被删除
    POST:  不是,因为一次请求添加一份新的资源,二次请求是乎产生不同的结
     
    ############ 区别 ############
    1)GET请求 和 POST请求
    从字面意思就可以看出两者区别,一个是GET(获取),一个是POST(发送)。
     
    GET方法的请求用来告诉服务器需要获取哪些内容(uri+query),向静态页面(uri)请求则直接返回文件内容给浏览器,向一个动态页面请求时可以
    提供查询参数(query)以获得相应内容。
     
    POST方法的请求用来向服务器提交内容,主要是为了提交,而不是为了请求内容,就是说POST的初衷并不要求服务器返回内容,只是提交内容让服务器
    处理(主要是存储或者处理之后再存储)。
     
    2)PUT请求 和 POST请求
    PUT请求主要作用在一个具体资源之上的(即uri/xxx),POST请求主要作用在一个集合资源之上的(即uri)
    就是说,如果URL可以在客户端确定就使用PUT请求,如果URL在服务端确定就使用POST请求。
     
    PUT请求和POST请求容器混淆的就是它们都可以修改数据。它们的区别在于是否等幂:PUT请求是等幂操作,而POST请求是不等幂操作。
    所以POST方式每执行一次会增加一条数据,而PUT请求是在已经存在的数据上进行修改。
    也就是说POST方式一般用于增加数据,POST方式用于修改已有数据。

    2.  GET、POST、PUT、DELETE四种请求方式的curl访问

    -v 显示请求的信息
    -X 选项指定其它协议
    
    GET请求方式
    # curl -v 172.16.60.21:8080/caijin/age/18
    
    POST请求方式
    # curl -v 172.16.60.21:8080/caijin -d 'age=14&cupSize=C'
    # curl -v -X POST 172.16.60.21:8080/caijin -d 'age=14&cupSize=C'
    
    PUT请求方式
    # curl -v -X PUT -d "age=19&cupSize=C" 172.16.60.21:8080/caijin/3
    # curl -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{"message":"aaaa","exchange_id":"123" }' 'http://localhost:9090/service/record'
    
    DELETE请求方式
    # curl -v -X DELETE 172.16.60.21:8080/caijin/3
  • 相关阅读:
    轻松记账工程冲刺第一天
    课堂练习-找水王
    NABCD模型—轻松记账
    四则运算网页版
    二维数组最大子数组(结对开发)
    软件工程结对作业01
    返回一个二维整数数组中最大联通子数组的和
    学习进度条(第六周)
    整数数组中最大子数组的和
    学习进度条(第五周)
  • 原文地址:https://www.cnblogs.com/kevingrace/p/9030324.html
Copyright © 2011-2022 走看看