导航首页 » 站长干货 » Linux curl命令详解
Linux curl命令详解
curl是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作;   curl提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传...。   一、curl命令语法: curl [options] [URL...]   二、curl命令参数详解:   由于linux curl功能十分强大,所以命令参数十分多,下表只是爱E族(aiezu.com)帅选出来的部分参数,更多参数请运行“man curl”命令查看。 参数组 参数 描述 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)添加一个http header(http请求头); -H "name:" --header "name:" (HTTP)移除一个http header(http请求头); -A "string" --user-agent "string" (HTTP)设置Http请求头“User-Agent”,服务器通过“User-Agent”可以判断客户端使用的浏览器名称和操作系统类型,伪造此参数能导致服务器做出错误判断。 也可以使用“-H”, “--header option”设置此选项; -e  --referer (HTTP)设置访问时的来源页面,告诉http服务从哪个页面进入到此页面; -e "aiezu.com"相当于“-H "Referer: www.qq.com"”; 响 应 头 -I --head (HTTP)只输出HTTP-header,不获取内容(HTTP/FTP/FILE)。 用于HTTP服务时,获取页面的http头; (如:curl -I http://aiezu.com) 用于FTP/FILE时,将会获取文件大小、最后修改时间; (如:curl -I file://test.txt) -i --include (HTTP)输出HTTP头和返回内容; -D  --dump-header (HTTP)转储http响应头到指定文件; cookie -b name=data --cookie name=data (HTTP)发送cookie数据到HTTP服务器,数据格式为:"NAME1=VALUE1; NAME2=VALUE2"; 如果行中没有“=”,将把参数值当作cookie文件名; 这个cookie数据可以是由服务器的http响应头“Set-Cookie:”行发送过来的; -c filename --cookie-jar file name (HTTP)完成操作后将服务器返回的cookies保存到指定的文件; 指定参数值为“-”将定向到标准输出“如控制台”; -j --junk-session-cookies (HTTP)告诉curl放弃所有的"session cookies"; 相当于重启浏览器; 代理 -x host: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; 如: --proxy 8.8.8.8:8080; -x "http_proxy://aiezu:123@aiezu.com:80" -p --proxytunnel 将“-x”参数的代理,作为通道的方式去代理非HTTP协议,如ftp; --socks4 --socks4a --socks5 使用SOCKS4代理; 使用SOCKS4A代理; 使用SOCKS5代理; 此参数会覆盖“-x”参数; --proxy-anyauth --proxy-basic --proxy-diges --proxy-negotiate --proxy-ntlm http代理认证方式,参考: --anyauth --basic --diges --negotiate --ntlm -U  --proxy-user 设置代理的用户名和密码; 数据 传输 -G --get 如果使用了此参数,“-d/”、“--data”、“--data-binary”参数设置的数据,讲附加在url上,以GET的方式请求; -d @file -d "string" --data "string" --data-ascii "string" --data-binary "string" --data-urlencode "string" (HTTP)使用HTTP POST方式发送“key/value对”数据,相当于浏览器表单属性(method="POST",enctype="application/x-www-form-urlencoded") -d,--data:HTTP方式POST数据; --data-ascii:HTTP方式POST ascii数据; --data-binary:HTTP方式POST二进制数据; --data-urlencode:HTTP方式POST数据(进行urlencode); 如果数据以“@”开头,后紧跟一个文件,将pos站长精选导航网t文件内的内容; -F name=@file -F name= (HTTP)类似于“--form”,但是“@”、“<”无特殊含义; -T file --upload-file file 通过“put”的方式将文件传输到远程网址; 选项参数只使用字符"-",将通过stdin读入文件内容; 如: cat test.txt|curl "http://aiezu.com/a.php" -T - curl "http://aiezu.com/a.php" -T - --continue-at  断点续转,从文件头的指定位置开始继续下载/上传; offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输; -r  --range (HTTP/FTP/SFTP/FILE) 只传输内容的指定部分: 0-499:最前面500字节; -500:最后面500字节; 9500-:最前面9500字节; 0-0,-1:最前面和最后面的1字节; 100-199,500-599:两个100字节; 认证 --basic (HTTP)告诉curl使用HTTP Basic authentication(HTTP协议时),这是默认认证方式; --ntlm (HTTP)使用NTLM身份验证方式,用于HTTP协议; 一般用于IIS使用NTLM的网站; --digest (HTTP)使用HTTP Digest authentication加密,用于HTTP协议; 配合“-u/--user”选项,防止密码使用明文方式发送; --negotiate (HTTP)使用GSS-Negotiate authentication方式,用于HTTP协议; 它主要目的是为它的主要目的是为kerberos5认证提供支持支持; --anyauth (HTTP)告诉curl自动选择合适的身份认证方法,并选用最安全的方式; -u user:password --user user:password 使用用户名、密码认证,此参数会覆盖“-n”、“--netrc”和“--netrc-optional”选项; 如果你只提供用户名,curl将要求你输入密码; 如果你使用“SSPI”开启的curl库做“NTLM”认证,可以使用不含用户名密码的“-u:”选项,强制curl使用当前登录的用户名密码进行认证; 此参数相当于设置http头“Authorization:”; 证书 -E <证书[:密码]> --cert <证书[:密码]> (SSL)指定“PEM”格式的证书文件和证书密码; --cert-type (SSL)告诉curl所提供证书的类型:PEM、DER、ENG等; 默认为“PEM”; --cacert (SSL)告诉curl所以指定的CA证书文件,必须是“PEM”格式; --capath (SSL)告诉curl所以指定目录下的CA证书用来验证; 这些证书必须是“PEM”格式; --crlfile (HTTPS/FTPS)提供一个PEM格式的文件,用于指定被吊销的证书列表; -k --insecure (SSL)设置此选项将允许使用无证书的不安全SSL进行连接和传输。 SSL 其他 --ciphers (SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”; --engine 设置一个OpenSSL加密引擎用于加密操作; 使用“curl --engine list”查看支持的加密引擎列表; --random-file (SSL)指定包含随机数据的文件路径名;数据是用来为SSL连接产生随机种子为; --egd-file  (SSL)为随机种子生成器EGD(Entropy Gathering Daemon socket)指定的路径名; -1/--tlsv1 --tlsv1.0 --tlsv1.1 --tlsv1.2 -2/--sslv2 -3/--sslv3 (SSL)使用TLS版本2与远程服务器通讯; (SSL)使用TLS 1.0版本与远程服务器通讯; (SSL)使用TLS 1.1版本与远程服务器通讯; (SSL)使用TLS 1.2版本与远程服务器通讯; (SSL)使用SSL版本2与远程服务器通讯; (SSL)使用SSL版本3与远程服务器通讯; 私钥 公钥 --key (SSL/SSH)指定一个私钥文件名;为指定时自动尝试使用下面文件:“~/.ssh/id_rsa”、“~/.ssh/id_dsa”、“./id_rsa'”、 “./id_dsa”; --key-type (SSL)指定私钥文件类型,支持:DER、PEM、ENG,默认是PEM; --pass  (SSL/SSH)指定私钥文件的密码; --pubkey (SSH)使用指定文件提供的您公钥; FTP -P --ftp-port <接口> (FTP)FTP主动模式时,设置一个地址等待服务器的连接,如: 网卡:eth1 IP: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  限制curl使用的最大带宽;如果未指定单位,默认单位为“bytes/秒”,你也可以指定单位为“K”、“M”、“G”等单位,如:“--limit-rate 1m”为限制最大使用带宽为“1m字节/秒”; -y --speed-time