curl是Linux系统命令行下用来简单测试web访问的工具,是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载。
命令参数
curl命令参数很多。
-a/–append 上传文件时,附加到目标文件
-A:随意指定自己这次访问所宣称的自己的浏览器信息
-b/–cookie
cookie字符串或文件读取位置,使用option来把上次的cookie信息追加到http request里面去。 -c/–cookie-jar
操作结束后把cookie写入到这个文件中 -C/–continue-at
断点续转 -d/–data HTTP POST方式传送数据
- –data-ascii 以ascii的方式post数据
- –data-binary 以二进制的方式post数据
- –negotiate 使用HTTP身份验证
- –digest 使用数字身份验证
- –disable-eprt 禁止使用EPRT或LPRT
- –disable-epsv 禁止使用EPSV
-D/–dump-header
把header信息写入到该文件中 - –egd-file
为随机数据(SSL)设置EGD socket路径 - –tcp-nodelay 使用TCP_NODELAY选项
- –egd-file
-e/–referer
指定引用地址 -F/–form
模拟http表单提交数据 - –form-string
模拟http表单提交数据
- –form-string
-G/–get 以get的方式来发送数据
-H/–header
指定请求头参数 - –ignore-content-length 忽略的HTTP头信息的长度
-i/–include 输出时包括protocol头信息
-I/–head 仅返回头部信息,使用HEAD请求
-k/–insecure 允许不使用证书到SSL站点
-K/–config 指定的配置文件读取
-l/–list-only 列出ftp目录下的文件名称
- –limit-rate
设置传输速度 - –local-port
强制使用本地端口号
- –limit-rate
-m/–max-time
指定处理的最大时长 - –max-redirs
设置最大读取的目录数 - –max-filesize
设置最大下载的文件总量
- –max-redirs
-o/–output
指定输出文件名称 -O/–remote-name 把输出写到该文件中,保留远程文件的文件名
-v/–verbose 小写的v参数,用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用。
-s/–slient 减少输出的信息,比如进度
–connect-timeout
指定尝试连接的最大时长 -x/–proxy
指定代理服务器地址和端口,端口默认为1080 -u/–user
设置服务器的用户和密码 -r/–range
检索来自HTTP/1.1或FTP服务器字节范围 - –range-file 读取(SSL)的随机文件
-R/–remote-time 在本地生成文件时,保留远程文件时间
- –retry
指定重试次数 - –retry-delay
传输出现问题时,设置重试间隔时间 - –retry-max-time
传输出现问题时,设置最大重试时间
- –retry
-s/–silent 静默模式。不输出任何东西
-S/–show-error 显示错误
- –socks4
用socks4代理给定主机和端口 - –socks5
用socks5代理给定主机和端口 - –stderr
- –socks4
-x/–proxy
在给定的端口上使用HTTP代理 -X/–request
指定什么命令。curl默认的HTTP动词是GET,使用-X参数可以支持其他动词。 -T/–upload-file
指定上传文件路径
命令功能
curl命令是一个功能强大的网络工具,它能够通过http、ftp等方式下载文件,也能够上传文件,同时支持HTTPS等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息。类似的工具还有wget。curl命令使用了libcurl库来实现,libcurl库常用在C程序中用来处理HTTP请求,curlpp是libcurl的一个C++封装,这几个东西可以用在抓取网页、网络监控等方面的开发,而curl命令可以帮助来解决开发过程中遇到的问题。
常用命令
1.-x指定ip和端口,省略写hosts,方便使用
|
|
2.-I可以把当前的内容略掉,只显示状态码,-v可以显示详细过程
|
|
3.-u可以指定用户名和密码
|
|
4.-O直接下载页面或者对象
|
|
5.-o自定义名字
|
|
使用实例
实例1:读取网页
|
|
实例2:保存网页
-o:将文件保存为命令行中指定的文件名的文件中
|
|
-O:使用URL中默认的文件名保存文件到本地
|
|
其他:可以使用 >
进行输出
|
|
实例3:使用proxy服务器及其端口:-x
|
|
实例4:使用cookie来记录session信息
|
|
这个option: -D是把http的response里面的cookie信息存到一个特别的文件中去,
这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt里面了
实例5:下次访问的时候,使用iption把上次的cookie信息追加到http request里面去:-b
|
|
实例6:浏览器信息
|
|
实例7:referer
|
|
这样就可以骗对方的服务器,你是从mail.linuxidc.com点击某个连接过来的。
实例8:下载文件
|
|
-O可以按照服务器上的文件名,自动存在本地
|
|
实例9:批量下载
|
|
这样产生的下载就是:
|
|
自定义文件名的批量下载
|
|
这样,自定义出来下载下来的文件名就变成了这样:
原来:~zzh/001.JPG
–> 下载后: 001-zzh.JPG
原来: ~nick/001.JPG
–> 下载后: 001-nick.JPG
这样就不怕文件重名了。
实例10:断点续传
|
|
实例11:使用-r 分块下载
比如有一个 http://cgi2.tky.2web.ne.jp/~zzh/zhao1.MP3
要下载。就可以用这样的命令:
|
|
这样就可以分块下载了。不过需要自己把这些破碎的文件合并起来,如果用UNIX或者苹果,用 cat zhao.part* > zhao.MP3
就可以了;如果用的windows 用 copy /b
来解决。
实例12:使用FTP协议下载
上面都是http协议的下载,其实ftp也一样可以用。
|
|
或者
|
|
实例13:使用-T上传
向ftp传一个文件:
|
|
向http服务器上传文件
|
|
注意,这个时候,使用协议是HTTP的PUT method
实例14:POST和GET模式
说到PUT,自然还有其它几种methos,POST和GET
|
|
POST模式的option是-d
|
|
需要注意的是,POST模式下的文件上传,比如一个HTTP表单,要用curl进行模拟,就该是:
|
|
实例15:http本地证书
|
|
实例16:使用curl通过dict协议去查字典
|
|
实例17:获取服务端的信息,比如获取web Server的类型(apache/nginx)以及版本,php的版本等等
|
|
实例18:curl指定用户以及密码访问
有时候,访问一个网页时是需要认证的,也就是说需要输入正确的用户名以及密码信息,否则会包401的错误
|
|
这样就可以了
实例19:在linux上使用curl访问网站,指定主机IP
在linux的命令窗口下,无法使用浏览器去浏览网站,但是可以用curl访问html代码。有时,为了指定某个域名的IP,需要写hosts,比较费事。可以临时用curl命令指定一个IP
|
|
用 -x
选项指定主机IP,这种方法类似与IE设置了一个代理服务器。但有时候(访问https时)这样访问不太好用,可以使用:
|
|