一、最常用的curl命令
1、发送GET请求
curlURL
curlURL?a=1&b=nihao
2、发送POST请求
curl-XPOST-d'a=1&b=nihao'URL
3、发送json格式请求:
curl-H"Content-Type:application/json"-XPOST-d''URL
其中,-H代表header头,-X是指定什么类型请求(POST/GET/HEAD/DELETE/PUT/PATCH),-d代表传输什么数据。这几个是最常用的。查看所有curl命令:mancurl或者curl-h请求头:H,A,e响应头:I,i,Dcookie:b,c,j传输:F(POST),G(GET),T(PUT),X输出:o,O,w断点续传:r调试:v,--trace,--trace-ascii,--trace-time
二、curl命令语法与curl命令参数详解
1、curl命令语法
curl[options][URL...]
2、curl命令参数详解
由于linuxcurl功能十分强大,所以命令参数十分多,下表只是爱E族(aiezu.com)帅选出来的部分参数,更多参数请运行“mancurl”命令查看。
| 参数组 | 参数 | 描述 |
|---|
| url | url需要抓取的一到多个URLs;多个下面通配符的方式: 1、http://{www,ftp,mail}.aiezu.com; 2、http://aiezu.com/images/[001-999].jpg; 3、http://aiezu.com/images/[1-999].html; 4、ftp://aiezu.com/file[a-z].txt
|---|
请求头-H"name:value"--header"name:value"(HTTP)添加一个httpheader(http请求头);
-H"name:"--header"name:"(HTTP)移除一个httpheader(http请求头);
-A"string"--user-agent"string"(HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。也可以使用“-H”,“--headeroption”设置此选项;
-e<URL>--referer<URL>(HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面;-e"aiezu.com"相当于“-H"Referer:www.qq.com"”;
响应头-I--head(HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。用于HTTP服务时,获取页面的http头;(如:curl-Ihttp://aiezu.com)用于FTP/FILE时,将会获取文件大小、最后修改时间;(如:curl-Ifile://test.txt)
-i--include(HTTP)输出HTTP头和返回内容;
-D<file>--dump-header<file>(HTTP)转储http响应头到指定文件;
cookie-bname=data--cookiename=data(HTTP)发送cookie数据到HTTP服务器,数据格式为:"NAME1=VALUE1;NAME2=VALUE2";如果行中没有“=”,将把参数值当作cookie文件名;这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的;
-cfilename--cookie-jarfilename(HTTP)完成操作后将服务器返回的cookies保存到指定的文件;指定参数值为“-”将定向到标准输出“如控制台”;
-j--junk-session-cookies(HTTP)告诉curl放弃所有的"sessioncookies";相当于重启浏览器;
代理-xhost:port-x[protocol://[user:pwd@]host[:port]--proxy[protocol://[user:pwd@]host[:port]使用HTTP代理访问;如果未指定端口,默认使用8080端口;protocol默认为http_proxy,其他可能的值包括:http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;如:--proxy8.8.8.8:8080;-x"http_proxy://aiezu:123@aiezu.com:80"
-p--proxytunnel将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp;
--socks4<host[:port]>--socks4a<host[:port]>--socks5<host[:port]>使用SOCKS4代理;使用SOCKS4A代理;使用SOCKS5代理;此参数会覆盖“-x”参数;
--proxy-anyauth--proxy-basic--proxy-diges--proxy-negotiate--proxy-ntlmhttp代理认证方式,参考:--anyauth--basic--diges--negotiate--ntlm
-U<user:password>--proxy-user<user:password>设置代理的用户名和密码;
数据传输-G--get如果使用了此参数,“-d/”、“--data”、“--data-binary”参数设置的数据,讲附加在url上,以GET的方式请求;
-d@file-d"string"--data"string"--data-ascii"string"--data-binary"string"--data-urlencode"string"(HTTP)使用HTTPPOST方式发送“key/value对”数据,相当于浏览器表单属性(method="POST",enctype="application/x-www-form-urlencoded") -d,--data:HTTP方式POST数据; --data-ascii:HTTP方式POSTascii数据; --data-binary:HTTP方式POST二进制数据; --data-urlencode:HTTP方式POST数据(进行urlencode);如果数据以“@”开头,后紧跟一个文件,将post文件内的内容;
-Fname=@file-Fname=<file-Fname=content--formname=content(HTTP)使用HTTPPOST方式发送类似“表单字段”的多类型数据,相当于同时设置浏览器表单属性(method="POST",enctype="multipart/form-data"),可以使用此参数上传二进制文件。如果字段内容以“@”开头,剩下的部分应该是文件名,curl将会上传此文件,如:curl-F"pic=@pic.jpg"http://aiezu.com;curl-F"page=@a.html;type=text/html"http://aiezu.comcurl-F"page=@/tmp/a;filename=a.txt"http://aiezu.com如果字段内容以“<”开头,剩下的部分应该是文件名,curl将从文件中获取作为此字段的值,如:curl-F"text=<text.txt"http://aiezu.com;
--form-string<key=value>(HTTP)类似于“--form”,但是“@”、“<”无特殊含义;
-Tfile--upload-filefile通过“put”的方式将文件传输到远程网址;选项参数只使用字符"-",将通过stdin读入文件内容;如:cattest.txt|curl"http://aiezu.com/a.php"-T-curl"http://aiezu.com/a.php"-T-<test.txt此参数也可以使用通配符:curl-T"{file1,file2}"http://aiezu.comcurl-T"img[1-1000].png"http://aiezu.com
断点续传-C<offset>--continue-at<offset>断点续转,从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输;
-r<range>--range<range>(HTTP/FTP/SFTP/FILE)只传输内容的指定部分:0-499:最前面500字节;-500:最后面500字节;9500-:最前面9500字节;0-0,-1:最前面和最后面的1字节;100-199,500-599:两个100字节;
认证--basic(HTTP)告诉curl使用HTTPBasicauthentication(HTTP协议时),这是默认认证方式;
--ntlm(HTTP)使用NTLM身份验证方式,用于HTTP协议;一般用于IIS使用NTLM的网站;
--digest(HTTP)使用HTTPDigestauthentication加密,用于HTTP协议;配合“-u/--user”选项,防止密码使用明文方式发送;
--negotiate(HTTP)使用GSS-Negotiateauthentication方式,用于HTTP协议;它主要目的是为它的主要目的是为kerberos5认证提供支持支持;
--anyauth(HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式;
-uuser:password--useruser:password使用用户名、密码认证,此参数会覆盖“-n”、“--netrc”和“--netrc-optional”选项;如果你只提供用户名,curl将要求你输入密码;如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证;此参数相当于设置http头“Authorization:”;
证书-E<证书[:密码]>--cert<证书[:密码]>(SSL)指定“PEM”格式的证书文件和证书密码;
--cert-type<type>(SSL)告诉curl所提供证书的类型:PEM、DER、ENG等;默认为“PEM”;
--cacert<CA证书>(SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式;
--capath<CA证书路径>(SSL)告诉curl所以指定目录下的CA证书用来验证;这些证书必须是“PEM”格式;
--crlfile<file>(HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表;
-k--insecure(SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。
SSL其他--ciphers<listofciphers>(SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”;
--engine<name>设置一个OpenSSL加密引擎用于加密操作;使用“curl--enginelist”查看支持的加密引擎列表;
--random-file(SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为;
--egd-file<file>(SSL)为随机种子生成器EGD(EntropyGatheringDaemonsocket)指定的路径名;
-1/--tlsv1--tlsv1.0--tlsv1.1--tlsv1.2-2/--sslv2-3/--sslv3(SSL)使用TLS版本2与远程服务器通讯;(SSL)使用TLS1.0版本与远程服务器通讯;(SSL)使用TLS1.1版本与远程服务器通讯;(SSL)使用TLS1.2版本与远程服务器通讯;(SSL)使用SSL版本2与远程服务器通讯;(SSL)使用SSL版本3与远程服务器通讯;
私钥公钥--key<key>(SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“https://www.fruan.com/post/id_rsa'”、“https://www.fruan.com/post/id_dsa”;
--key-type<type>(SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM;
--pass<phrase>(SSL/SSH)指定私钥文件的密码;
--pubkey<key>(SSH)使用指定文件提供的您公钥;
FTP-P--ftp-port<接口>(FTP)FTP主动模式时,设置一个地址等待服务器的连接,如:网卡:eth1IP:8.8.8.8主机名:aiezu.com可以加端口号:eth1:20000-21000;
--crlf(FTP)上传时将换行符(LF)转换为回车换行(CRLF);
--ftp-account[data](FTP)ftp帐号信息;
--ftp-method[method](FTP)可选值:multicwd/nocwd/singlecwd;
--ftp-pasv(FTP)使用使用PASV(被动)/EPSV模式;
--ftp-skip-pasv-ip(FTP)使用PASV的时,跳过指定IP;
--ftp-create-dirs(FTP)上传时自动创建远程目录;
-l--list-only(FTP)列出ftp文件列表;
-B--use-ascii(FTP/LDAP)使用Ascii传输模式,用于FTP、LDAP;在ftp中相当与使用了“type=A;”模式。
--disable-epsv(FTP)告诉curl在PASV(被动模式)时不要使用EPSV;
--disable-eprt(FTP)告诉curl在主动模式时禁用EPRT和LPRT;
限速--limit-rate<speed>限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“--limit-rate1m”为限制最大使用带宽为“1m字节/秒”;
-y--speed-time<time>Ifadownloadisslowerthanspeed-limitbytespersecondduringaspeed-timeperiod,thedownloadgetsaborted.Ifspeed-timeisused,thedefaultspeed-limitwillbe1unlesssetwith-Y.Thisoptioncontrolstransfersandthuswillnotaffectslowconnectsetc.Ifthisisaconcernforyou,trythe--connect-timeoutoption.
-Y--speed-limit<speed>Ifadownloadisslowerthanthisgivenspeed(inbytespersecond)forspeed-timesecondsitgetsaborted.speed-timeissetwith-yandis30ifnotset.
其他选项-0/--http1.0(HTTP)强制curl使用HTTP1.0而不是使用默认的HTTP1.1;
--interface<name>使用指定的网卡接口访问;curl--interfaceeth0http://aiezu.comcurl--interface10.0.0.101http://aiezu.com
-X<command>--request<command>(HTTP)指定与服务器通信使用的请求方法,如:GET、PUT、POST、DELETE等,默认GET;
--keepalive-time<seconds>设置keepalive时间
--no-keepalive关闭keepalive功能;
--no-buffer禁用对输出流缓冲;
--buffer启用输出流缓冲;
-L--location(HTTP/HTTPS)追随http响应头“Location:”定向到跳转后的页面;(在http响应码为3XX时使用,如301跳转、302跳转)
--location-trusted(HTTP/HTTPS)同“--location”,但跳转后会发送跳转前的用户名和密码;
--compressed(HTTP)请求对返回内容使用压缩算法进行压缩;curl支持对gzip压缩进行解压;
--connect-timeout<seconds>指定最大连接超时,单位“秒”;
-mseconds--max-timeseconds限制整个curl操作的最长时间,单位为秒;
-s--silent安静模式。不要显示进度表或错误消息;
-”后跟“数字序号”,curl会自动将它替换对应的关键词,如: curl"http://aiezu.com/{a,b}.txt"-o"1#2.txt"; 将保存为:a1.txt、a2.txt、a3.txt、b1.txt、b2.txt、b3.txt 如果要根据规则创建保存目录,参考:“--create-dirs”指定“-”将定向到标准输出“如控制台”;
-O--remote-name将返回内容输出到当前目录下,和url中文件名相同的文件中(不含目录);
--create-dirs与“-o”参数配合使用,创建必要的本地目录层次结构
-w--write-outformat操作完成后在返回信息尾部追加指定的内容;要追加的内容可以是一个字符串“string”、从文件中获取“@filename”、从标准输入中获取“@-”格式参数中可以用%{variable_name}方式使用响应信息的相关变量,如:%{content_type}、%{http_code}、%{local_ip}...,更多变量参考“mancurl”获取;格式参数可以使用“
”、“\r”、“ ”等转义字符;
调试--trace<file>转储所有传入和传出的数据到文件,包括描述信息;使用“-”作为文件名将输出发送到标准输出。
--trace-asciifile转储所有传入和传出的数据到文件,包括描述信息,只转储ASCII部分,更容易阅读;使用“-”作为文件名将输出发送到标准输出。这个选项会覆盖之前使用的-v、--verbose、--trace-ascii选项;
--trace-time转储文件中添加时间信息;
-K--config<configfile>从配置文件中读取参数,参考:http://curl.haxx.se/docs/
-v--verbose显示更详细的信息,调试时使用;
帮助-M--manual显示完整的帮助手册;
-h--helplinuxcurl用法帮助;
举例:有需求每5分钟请求一次http://www.test.com/a/b生成一个日志文件。希望一月的日志(正确的和错误的)能写入一个日志文件day=`date+%F`logfile='/var/logs/www.test.com_'`date+%Y%m`'.log'/usr/bin/echo-e"
">>${logfile}/bin/curl-v"http://www.test.com/a/b"-d"ccccc"1>>${logfile}2>>${logfile}--trace-time/usr/bin/echo-e"
以上就是linuxcurl是什么的详细内容,更多请关注主机测评网其它相关文章!
标签: