curl.exe安装使用的最全参数详解以及常用命令汇总
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、如何安装Curl.exe?</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.下载安装包</a></li><li><a href="#_lab2_0_1">2.安装</a></li></ul><li><a href="#_label1">二、curl命令语法与curl命令参数详解</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_2">1、curl命令语法</a></li><li><a href="#_lab2_1_3">2、curl命令参数详解</a></li></ul><li><a href="#_label2">四、curl使用的常用命令</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_4">1、下载(option:-o或者option:-O)</a></li><li><a href="#_lab2_2_5">2、上传文件(option:-T)</a></li><li><a href="#_lab2_2_6">3、伪造来源页面|伪造referer|盗链 (option:-e)</a></li><li><a href="#_lab2_2_7">4、伪造代理设备(模仿浏览器)</a></li><li><a href="#_lab2_2_8">5、设置http请求</a></li><li><a href="#_lab2_2_9">6、http响应头</a></li><li><a href="#_lab2_2_10">7、发送表单数据</a></li><li><a href="#_lab2_2_11">8、cookie</a></li><li><a href="#_lab2_2_12">9、测试一个网址</a></li><li><a href="#_lab2_2_13">10、保存访问的网页(>>)</a></li><li><a href="#_lab2_2_14">11、请求方式</a></li><li><a href="#_lab2_2_15">12、调试</a></li><li><a href="#_lab2_2_16">13、显示抓取错误</a></li></ul><li><a href="#_label3">四、总结</a></li><ul class="second_class_ul"></ul></ul></div><p>Curl是一个功能强大的命令行工具,可以看做是命令行浏览器。用于与服务器进行数据交互,支持多种数据传输协议,如HTTP、HTTPS、FTP等。它支持文件的上传和下载,所以是综合传输工具,但习惯称curl为下载工具。它是一款开源软件,在多个操作系统上均可运行,包括Windows、Linux、macOS等。Linux系统自带curl,Windows下需要自行安装才能使用。</p><p class="maodian"><a name="_label0"></a></p><h2>一、如何安装Curl.exe?</h2>
<p>一般来说,Linux系统自带curl,Windows下需要自行安装才能使用。如果没有,我们需要首先安装 curl 。</p>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.下载安装包</h3>
<p><strong>下载直通车:</strong>https://curl.se/windows   <strong>curl官网下载地址:</strong> https://curl.se/download.html</p>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2.安装</h3>
<p>mac:可通过命令直接安装 brew install curl。</p>
<p>windows:通过上面的资源下载地址,找到windows版本下载解压得到.exe文件,全局使用需配置环境变量。</p>
<p>linux具体版本快捷安装方式:</p>
<p>centos: yum -y install curl</p>
<p>ubuntu: sudo apt-get install curl</p>
<p>其他发行版,建议通过上面的资源下载地址,下载Linux版本解压tar -xzvf xxx.tar.gz,然后安装。</p>
<p class="maodian"><a name="_label1"></a></p><h2>二、curl命令语法与curl命令参数详解</h2>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>1、curl命令语法</h3>
<div class="jb51code"><pre class="brush:xhtml;">curl </pre></div>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>2、curl命令参数详解</h3>
<p>由于linux curl功能十分强大,所以命令参数十分多,下表只是帅选出来的部分参数,更多参数请运行“man curl”命令查看。</p>
<table><tbody><tr><th>参数组</th><th>参数</th><th>描述</th></tr><tr><th>url</th><td>url</td><td>需要抓取的一到多个URLs;<br />多个下面通配符的方式:<br /> 1、http://{www,ftp,mail}.aiezu.com;<br /> 2、http://aiezu.com/images/.jpg;<br /> 3、http://aiezu.com/images/.html;<br /> 4、ftp://aiezu.com/file.txt</td></tr><tr><th>请<br />求<br />头</th><td>-H "name: value"<br />--header "name: value"</td><td>(HTTP)添加一个http header(http请求头);</td></tr><tr><td>-H "name:"<br />--header "name:"</td><td>(HTTP)移除一个http header(http请求头);</td></tr><tr><td>-A "string"<br />--user-agent "string"</td><td>(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。<br />也可以使用“-H”, “--header option”设置此选项;</td></tr><tr><td>-e <URL><br />--referer <URL></td><td>(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;<br />-e "aiezu.com"相当于“-H "Referer: www.qq.com"”;</td></tr><tr><th>响<br />应<br />头</th><td>-I<br />--head</td><td>(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。<br />用于HTTP服务时,获取页面的http头;<br /> (如:curl -I http://aiezu.com)<br />用于FTP/FILE时,将会获取文件大小、最后修改时间;<br /> (如:curl -I file://test.txt)</td></tr><tr><td>-i<br />--include</td><td>(HTTP)输出HTTP头和返回内容;</td></tr><tr><td>-D <file><br />--dump-header <file></td><td>(HTTP)转储http响应头到指定文件;</td></tr><tr><th>cookie</th><td>-b name=data<br />--cookie name=data</td><td>(HTTP)发送cookie数据到HTTP服务器,数据格式为:"NAME1=VALUE1; NAME2=VALUE2";<br /><br />如果行中没有“=”,将把参数值当作cookie文件名;<br /><br />这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;</td></tr><tr><td>-c filename<br />--cookie-jar file name</td><td>(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;<br />指定参数值为“-”将定向到标准输出“如控制台”;</td></tr><tr><td>-j<br />--junk-session-cookies</td><td>(HTTP)告诉curl放弃所有的"session cookies";<br />相当于重启浏览器;</td></tr><tr><th>代理</th><td>-x host:port<br />-x host[:port]<br />--proxy host[:port]</td><td>使用HTTP代理访问;如果未指定端口,默认使用8080端口;<br />protocol默认为http_proxy,其他可能的值包括:<br />http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;<br />如:<br />--proxy 8.8.8.8:8080;<br />-x "http_proxy://aiezu:123@aiezu.com:80"</td></tr><tr><td>-p<br />--proxytunnel</td><td>将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;</td></tr><tr><td>--socks4 <host[:port]><br />--socks4a <host[:port]><br />--socks5 <host[:port]></td><td>使用SOCKS4代理;<br />使用SOCKS4A代理;<br />使用SOCKS5代理;<br />此参数会覆盖“-x”参数;</td></tr><tr><td>--proxy-anyauth<br />--proxy-basic<br />--proxy-diges<br />--proxy-negotiate<br />--proxy-ntlm</td><td>http代理认证方式,参考:<br />--anyauth<br />--basic<br />--diges<br />--negotiate<br />--ntlm</td></tr><tr><td>-U <user:password><br />--proxy-user <user:password></td><td>设置代理的用户名和密码;</td></tr><tr><th>数据<br />传输</th><td>-G<br />--get</td><td>如果使用了此参数,“-d/”、“--data”、“--data-binary”参数设置的数据,讲附加在url上,以GET的方式请求; </td></tr><tr><td>-d @file<br />-d "string"<br />--data "string"<br />--data-ascii "string"<br />--data-binary "string"<br />--data-urlencode "string"</td><td>(HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method="POST",enctype="application/x-www-form-urlencoded")<br /> -d,--data:HTTP方式POST数据;<br /> --data-ascii:HTTP方式POST ascii数据;<br /> --data-binary:HTTP方式POST二进制数据;<br /> --data-urlencode:HTTP方式POST数据(进行urlencode);<br />如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;</td></tr><tr><td>-F name=@file<br />-F name=<file<br />-F name=content<br />--form name=content</td><td>(HTTP)使用HTTP POST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method="POST",enctype="multipart/form-data"),可以使用此参数上传二进制文件。<br /><br />如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:<br />curl -F "pic=@pic.jpg" http://aiezu.com;<br />curl -F "page=@a.html;type=text/html" http://aiezu.com<br />curl -F "page=@/tmp/a;filename=a.txt" http://aiezu.com<br /><br />如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl -F "text=<text.txt" http://aiezu.com;</td></tr><tr><td>--form-string <key=value></td><td>(HTTP)类似于“--form”,但是“@”、“<”无特殊含义;</td></tr><tr><td>-T file<br />--upload-file file</td><td>通过“put”的方式将文件传输到远程网址;<br /><br />选项参数只使用字符"-",将通过stdin读入文件内容;<br />如:<br />cat test.txt|curl "http://aiezu.com/a.php" -T - <br />curl "http://aiezu.com/a.php" -T - <test.txt<br /><br />此参数也可以使用通配符:<br />curl -T "{file1,file2}" http://aiezu.com<br />curl -T "img.png" http://aiezu.com</td></tr><tr><th>断点<br />续传</th><td>-C <offset><br />--continue-at <offset></td><td>断点续转,从文件头的指定位置开始继续下载/上传;<br />offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;</td></tr><tr><td>-r <range><br />--range <range></td><td>(HTTP/FTP/SFTP/FILE) 只传输内容的指定部分:<br />0-499:最前面500字节;<br />-500:最后面500字节;<br />9500-:最前面9500字节;<br />0-0,-1:最前面和最后面的1字节;<br />100-199,500-599:两个100字节;</td></tr><tr><th><br /><br /><br />认证</th><td>--basic</td><td>(HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式;</td></tr><tr><td>--ntlm</td><td>(HTTP)使用NTLM身份验证方式,用于HTTP协议;<br />一般用于IIS使用NTLM的网站;</td></tr><tr><td>--digest</td><td>(HTTP)使用HTTP Digest authentication加密,用于HTTP协议;<br />配合“-u/--user”选项,防止密码使用明文方式发送;</td></tr><tr><td>--negotiate</td><td>(HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议;<br />它主要目的是为它的主要目的是为kerberos5认证提供支持支持;</td></tr><tr><td>--anyauth</td><td>(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;</td></tr><tr><td>-u user:password<br />--user user:password</td><td>使用用户名、密码认证,此参数会覆盖“-n”、“--netrc”和“--netrc-optional”选项;<br /><br />如果你只提供用户名,curl将要求你输入密码;<br /><br />如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;<br /><br />此参数相当于设置http头“Authorization:”;</td></tr><tr><th>证书</th><td>-E <证书[:密码]><br />--cert <证书[:密码]></td><td>(SSL)指定“PEM”格式的证书文件和证书密码;</td></tr><tr><td>--cert-type <type></td><td>(SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;<br />默认为“PEM”;</td></tr><tr><td>--cacert <CA证书></td><td>(SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;</td></tr><tr><td>--capath <CA证书路径></td><td>(SSL)告诉curl所以指定目录下的CA证书用来验证;<br />这些证书必须是“PEM”格式;</td></tr><tr><td>--crlfile <file></td><td>(HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;</td></tr><tr><td>-k<br />--insecure</td><td>(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。</td></tr><tr><th>SSL<br />其他</th><td>--ciphers <list of ciphers></td><td>(SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;</td></tr><tr><td>--engine <name></td><td>设置一个OpenSSL加密引擎用于加密操作;<br />使用“curl --engine list”查看支持的加密引擎列表;</td></tr><tr><td>--random-file</td><td>(SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;</td></tr><tr><td>--egd-file <file></td><td>(SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名;</td></tr><tr><td>-1/--tlsv1<br />--tlsv1.0<br />--tlsv1.1<br />--tlsv1.2<br />-2/--sslv2<br />-3/--sslv3</td><td>(SSL)使用TLS版本2与远程服务器通讯;<br />(SSL)使用TLS 1.0版本与远程服务器通讯;<br />(SSL)使用TLS 1.1版本与远程服务器通讯;<br />(SSL)使用TLS 1.2版本与远程服务器通讯;<br />(SSL)使用SSL版本2与远程服务器通讯;<br />(SSL)使用SSL版本3与远程服务器通讯;</td></tr><tr><th>私钥<br />公钥</th><td>--key <key></td><td>(SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa'”、 “./id_dsa”;</td></tr><tr><td>--key-type <type></td><td>(SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;</td></tr><tr><td>--pass <phrase></td><td>(SSL/SSH)指定私钥文件的密码;</td></tr><tr><td>--pubkey <key></td><td>(SSH)使用指定文件提供的您公钥;</td></tr><tr><th>FTP</th><td>-P<br />--ftp-port <接口></td><td>(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:<br />网卡:eth1<br />IP:8.8.8.8<br />主机名:aiezu.com<br />可以加端口号:eth1:20000-21000;</td></tr><tr><td>--crlf</td><td>(FTP)上传时将换行符(LF)转换为回车换行(CRLF);</td></tr><tr><td>--ftp-account </td><td>(FTP)ftp帐号信息;</td></tr><tr><td>--ftp-method </td><td>(FTP)可选值:multicwd/nocwd/singlecwd;</td></tr><tr><td>--ftp-pasv</td><td>(FTP)使用使用PASV(被动)/EPSV模式;</td></tr><tr><td>--ftp-skip-pasv-ip</td><td>(FTP)使用PASV的时,跳过指定IP;</td></tr><tr><td>--ftp-create-dirs</td><td>(FTP)上传时自动创建远程目录;</td></tr><tr><td>-l<br />--list-only</td><td>(FTP)列出ftp文件列表;</td></tr><tr><td>-B<br />--use-ascii</td><td>(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。</td></tr><tr><td>--disable-epsv</td><td>(FTP)告诉curl在PASV(被动模式)时不要使用EPSV;</td></tr><tr><td>--disable-eprt</td><td>(FTP)告诉curl在主动模式时禁用EPRT和LPRT;</td></tr><tr><th>限速</th><td>--limit-rate <speed></td><td>限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“--limit-rate 1m”为限制最大使用带宽为“1m字节/秒”;</td></tr><tr><td>-y<br />--speed-time <time></td><td>If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will be 1 unless set with -Y.<br />This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option.</td></tr><tr><td>-Y<br />--speed-limit <speed></td><td>If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set.</td></tr><tr><th>其他<br />选项</th><td>-0/--http1.0</td><td>(HTTP) 强制curl使用HTTP 1.0而不是使用默认的HTTP 1.1;</td></tr><tr><td>--interface <name></td><td>使用指定的网卡接口访问;<br />curl --interface eth0 http://aiezu.com<br />curl --interface 10.0.0.101 http://aiezu.com</td></tr><tr><td>-X <command><br />--request <command></td><td>(HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;</td></tr><tr><td>--keepalive-time <seconds></td><td>设置keepalive时间</td></tr><tr><td>--no-keepalive</td><td>关闭keepalive功能;</td></tr><tr><td>--no-buffer</td><td>禁用对输出流缓冲;</td></tr><tr><td>--buffer</td><td>启用输出流缓冲;</td></tr><tr><td>-L<br />--location</td><td>(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;<br />(在http响应码为3XX时使用,如301跳转、302跳转)</td></tr><tr><td>--location-trusted</td><td>(HTTP/HTTPS)同“--location”,但跳转后会发送跳转前的用户名和密码;</td></tr><tr><td>--compressed</td><td>(HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;</td></tr><tr><td>--connect-timeout <seconds></td><td>指定最大连接超时,单位“秒”;</td></tr><tr><td>-m seconds<br />--max-time seconds</td><td>限制整个curl操作的最长时间,单位为秒;</td></tr><tr><td>-s<br />--silent</td><td>安静模式。不要显示进度表或错误消息;</td></tr><tr><td>-#<br />--progress-bar</td><td>显示进度条;</td></tr><tr><th>错误<br />选项</th><td>-f<br />--fail</td><td>(HTTP)连接失败时(400以上错误)不返回默认错误页面,而是返回一个curl错误码“22”;</td></tr><tr><td>--retry <num><br />--retry-delay <seconds><br />--retry-max-time <seconds></td><td>失败重试次数;<br />重试间隔时间;<br />最大重试时间;</td></tr><tr><td>-S<br />--show-error</td><td>安静模式下显示错误信息;</td></tr><tr><td>--stderr <file></td><td>错误信息保存文件;</td></tr><tr><th>输出</th><td>-o file<br />--output file</td><td>将返回内容输出到文件。<br />如果是用过通配符获取多个url,可以使用“#”后跟“数字序号”,curl会自动将它替换对应的关键词,如:<br /> curl "http://aiezu.com/{a,b}.txt" -o "#1.txt";<br /> 将保存为:“a.txt”,“b.txt”;<br /><br /> curl "http://aiezu.com/{a,b}_.txt" -o "#1#2.txt";<br /> 将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt<br /><br /> 如果要根据规则创建保存目录,参考:“--create-dirs”<br /><br />指定“-”将定向到标准输出“如控制台”; </td></tr><tr><td>-O<br />--remote-name</td><td>将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);</td></tr><tr><td>--create-dirs</td><td>与“-o”参数配合使用,创建必要的本地目录层次结构</td></tr><tr><td>-w<br />--write-out format</td><td>操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”<br /><br />格式参数中可以用%{variable_name} 方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}...,更多变量参考“man curl”获取;<br /><br />格式参数可以使用“\n”、“\r”、“\t”等转义字符;</td></tr><tr><th>调试</th><td>--trace <file></td><td>转储所有传入和传出的数据到文件,包括描述信息;<br />使用“-”作为文件名将输出发送到标准输出。</td></tr><tr><td>--trace-ascii file</td><td>转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;<br />使用“-”作为文件名将输出发送到标准输出。<br />这个选项会覆盖之前使用的-v、 --verbose、 --trace-ascii选项;</td></tr><tr><td>--trace-time</td><td>转储文件中添加时间信息;</td></tr><tr><td>-K<br />--config <config file></td><td>从配置文件中读取参数,参考:http://curl.haxx.se/docs/</td></tr><tr><td>-v<br />--verbose</td><td>显示更详细的信息,调试时使用;</td></tr><tr><th>帮助</th><td>-M<br />--manual</td><td>显示完整的帮助手册;</td></tr><tr><td>-h<br />--help</td><td>linux curl用法帮助;</td></tr></tbody></table>
<p class="maodian"><a name="_label2"></a></p><h2><strong>四、</strong>curl使用的常用命令</h2>
<p class="maodian"><a name="_lab2_2_4"></a></p><h3>1、下载(option:-o或者option:-O)</h3>
<p>1.1、下载页面:</p>
<p>curl -o dodo1.jpg http:www.linux.com/dodo1.JPG<br />#要注意-O这里后面的url要具体到某个文件,不然抓不下来<br />curl -O http://www.linux.com/dodo1.JPG</p>
<p>1.2、循环下载</p>
<p>有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样。这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来<br />curl -O http://www.linux.com/dodo.JPG</p>
<p>1.3、下载重命名</p>
<p>在hello/dodo1.JPG的文件下载下来就会变成hello_dodo1.JPG,其他文件依此类推,从而有效的避免了文件被覆盖<br />curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo.JPG<br />由于下载的hello与bb中的文件名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下载的会把第一次下载的覆盖,这样就需要对文件进行重命名。<br />curl -O http://www.linux.com/{hello,bb}/dodo.JPG</p>
<p>1.4、分块下载(option:-r)</p>
<p>curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG<br />curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG<br />curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG<br />cat dodo1_part* > dodo1.JPG #这样就可以查看dodo1.JPG的内容了</p>
<p>1.5、通过ftp下载文件(option:-u)<br /><br />curl可以通过ftp下载文件,curl提供两种从ftp中下载的语法<br />curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG<br />curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG</p>
<p>1.6、下载,显示进度条(option:-#)或不显示进度条(option:-s)<br /><br />curl -# -O http://www.linux.com/dodo1.JPG <br />curl -s -O http://www.linux.com/dodo1.JPG</p>
<p>1.7、下载,断点续传(-C <offset>)</p>
<p>断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;<br />curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso<br />curl -C -O http://www.linux.com/dodo1.JPG</p>
<p class="maodian"><a name="_lab2_2_5"></a></p><h3>2、上传文件(option:-T)</h3>
<p>curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/</p>
<p class="maodian"><a name="_lab2_2_6"></a></p><h3>3、伪造来源页面|伪造referer|盗链 (option:-e)</h3>
<p>很多服务器会检查http访问的referer从而来控制访问。比如:你是先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了<br />#这样就会让服务器其以为你是从www.linux.com点击某个链接过来的<br />curl -e "www.linux.com" http://mail.linux.com<br />#告诉访问网站,我是从百度来的<br />curl -e http://baidu.com http://linux.com</p>
<p class="maodian"><a name="_lab2_2_7"></a></p><h3>4、伪造代理设备(模仿浏览器)</h3>
<p>有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本。curl内置option:-A可以让我们指定浏览器去访问网站<br />curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com<br />#告诉爱E族,我是GOOGLE爬虫蜘蛛(其实我是curl命令)<br />curl -A " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" http://aiezu.com<br />#告诉爱E族,我用的是微信内置浏览器<br />curl -A "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0" http://aiezu.com</p>
<p class="maodian"><a name="_lab2_2_8"></a></p><h3>5、设置http请求</h3>
<p>5.1、设置http请求头(或option:-H或option:--head)</p>
<p>curl -H "Cache-Control:no-cache" http://aiezu.com</p>
<p>5.2、指定proxy服务器以及其端口(option::-x)</p>
<p>#很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候),幸运的是curl通过使用内置option:-x来支持设置代理<br />curl -x 192.168.100.100:1080 http://www.linux.com</p>
<p class="maodian"><a name="_lab2_2_9"></a></p><h3>6、http响应头</h3>
<p>6.1、查看http响应头(option:-I)</p>
<p># 看看本站的http头是怎么样的<br />curl -I http://aiezu.com<br />输出:<br />HTTP/1.1 200 OK<br />Date: Fri, 25 Nov 2016 16:45:49 GMT<br />Server: Apache<br />Set-Cookie: rox__Session=abdrt8vesprhnpc3f63p1df7j4; path=/<br />Expires: Thu, 19 Nov 1981 08:52:00 GMT<br />Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br />Pragma: no-cache<br />Vary: Accept-Encoding<br />Content-Type: text/html; charset=utf-8</p>
<p>6.2、保存http的response里面的header信息(option:-D)</p>
<p>curl -D cookied.txt http://www.linux.com<br />执行后cookie信息就被存到了cookied.txt里面了<br />注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。</p>
<p class="maodian"><a name="_lab2_2_10"></a></p><h3>7、发送表单数据</h3>
<p>curl -F "pic=@logo.png" -F "site=aiezu" http://aiezu.com/</p>
<p class="maodian"><a name="_lab2_2_11"></a></p><h3>8、cookie</h3>
<p>8.1、发送cookie(option:-b)</p>
<p>#有些网站是使用cookie来记录session信息。对于chrome这样的浏览器,可以轻易处理cookie信息,但在curl中只要增加相关参数也是可以很容易的处理cookie<br />curl -b "domain=aiezu.com" http://aiezu.com<br />#很多网站都是通过监视你的cookie信息来判断你是否按规矩访问他们的网站的,因此我们需要使用保存的cookie信息。内置option: -b<br />curl -b cookiec.txt http://www.linux.com</p>
<p>8.2、保存http的response里面的cookie信息(option:-c)</p>
<p>执行后http的response里面的cookie信息就被存到了cookiec.txt里面了<br />curl -c cookiec.txt http://www.linux.com</p>
<p class="maodian"><a name="_lab2_2_12"></a></p><h3>9、测试一个网址</h3>
<p>9.1、测试一个网址是否可达<br />curl -v http://www.linux.com</p>
<p>9.2、测试网页返回值(option:-w )<br />curl -o /dev/null -s -w %{http_code} www.linux.com</p>
<p class="maodian"><a name="_lab2_2_13"></a></p><h3>10、保存访问的网页(>>)</h3>
<p>使用linux的重定向功能保存<br />curl http://www.linux.com >> linux.html</p>
<p class="maodian"><a name="_lab2_2_14"></a></p><h3>11、请求方式</h3>
<p>curl -i -v -H '' -X POST -d '' http:www.test.com/a/b<br />其中,-X POST -d, -X GET -d, -X PUT -d 分别等价于-F, -G -d, -P</p>
<p>以post请求为例:</p>
<p>11.1、 -X POST -d</p>
<p>(11.1.1)、POST application/x-www-form-urlencoded</p>
<p>application/x-www-form-urlencoded是默认的<br />curl -X POST -d "param1=value1¶m2=value2" http://localhost:3000/data<br />等价于<br />curl -H "Content-Type:application/x-www-form-urlencoded" -X POST -d "param1=value1¶m2=value2" http://localhost:3000/data<br />使用数据文件<br />curl -X POST -d "@data.txt" http://localhost:3000/data<br />其中data.txt内容如下:param1=value1¶m2=value2</p>
<p>(11.1.2)、POST application/json</p>
<p>curl -H "Content-Type:application/json" -X POST -d '{"key1":"value1","key2":"value2"}' http://localhost:3000/data<br />使用数据文件的话:<br />curl -X POST -d "@data.json" http://localhost:3000/data<br />其中data.json内容如下:{"key1":"value1","key2":"value2"}<br />再举个例子:<br />curl -H "Content-type:application/json" -X POST -d "{\"app_key\":\"$appKey\",\"time_stamp\":\"$time\"}" http://www.test.com.cn/a/b</p>
<p>11.2、-F</p>
<p>curl -v -H "token: 222" -F "file=@/Users/fungleo/Downloads/401.png" localhost:8000/api/v1/upimg </p>
<p>curl -f http://www.linux.com/error</p>
<p>11.3、其它举例</p>
<p>(11.3.1)、</p>
<p>curl -X POST "http://www.test.com/e/f" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \<br />-d "a=b" \<br />-d "c=d" \<br />-d "e=f" \<br />-d "g=h"</p>
<p>(11.3.2)、错误:curl -i -G -d "a=b#1&c=d" http://www.test.com/e/f<br />正确:要把参数值是特殊符号的用urlencode转换过来<br />curl -i -G -d "a=b%231&c=d" http://www.test.com/e/f</p>
<p class="maodian"><a name="_lab2_2_15"></a></p><h3>12、调试</h3>
<p>curl -v可以显示一次http通信的整个过程,包括端口连接和http request头信息。<br />如果觉得还不够,那么下面的命令可以查看更详细的通信过程:<br />curl --trace output.txt www.baidu.com 或者 curl --trace-ascii output.txt www.baidu.com <br />运行后,请打开output.txt文件查看。<br />curl --trace output.txt http://www.baidu.com<br />curl --trace-ascii output2.txt http://www.baidu.com<br />curl --trace output3.txt --trace-time http://www.baidu.com<br />curl --trace-ascii output4.txt --trace-time http://www.baidu.com</p>
<p>举例:有需求每5分钟请求一次http://www.test.com/a/b生成一个日志文件。希望一月的日志(正确的和错误的)能写入一个日志文件<br />day=`date +%F`<br />logfile='/var/logs/www.test.com_'`date +%Y%m`'.log'<br />/usr/bin/echo -e "\n\n[${day}] Start request \n " >> ${logfile}<br />/bin/curl -v "http://www.test.com/a/b" -d "ccccc" 1>> ${logfile} 2>> ${logfile} --trace-time<br />/usr/bin/echo -e "\n\n[${day}] End request\n" >> ${logfile}</p>
<p class="maodian"><a name="_lab2_2_16"></a></p><h3>13、显示抓取错误</h3>
<p>curl -f http://www.linux.com/error</p>
<p class="maodian"><a name="_label3"></a></p><h2>四、总结</h2>
<p>本篇文章介绍了Curl.exe的基本使用、进阶使用和高级用法,包括发送HTTP请求、上传文件、模拟登录、设置请求头、进行文件下载、并发测试、API测试、数据分析和数据传输控制等方面。Curl.exe是一个非常实用的命令行工具,可以帮助开发者更好地进行接口测试和数据分析。</p>
<p>到此这篇关于curl.exe安装使用的最全参数详解以及常用命令汇总的文章就介绍到这了,更多相关curl安装使用的常用命令内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
頁:
[1]