在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,支持文件的上传和下载,是综合传输工具,用于服务器之间传输数据,支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作,是一款很强大的http命令行工具。
命令语法:# curl [option] [url]
常见参数:
-A/--user-agent 设置用户代理发送给服务器
-b/--cookie cookie字符串或文件读取位置
-c/--cookie-jar 操作结束后把cookie写入到这个文件中
-C/--continue-at 断点续转
-D/--dump-header 把header信息写入到该文件中
-e/--referer 来源网址
-f/--fail 连接失败时不显示http错误
-o/--output 把输出写到该文件中
-O/--remote-name 把输出写到该文件,保留远程文件文件名
-r/--range 检索HTTP/1.1或FTP服务器字节范围
-s/--silent 静音模式。不输出任何东西
-T/--upload-file 上传文件
-u/--user 设置服务器的用户和密码
-w/--write-out [format] 输出指定格式的内容到标准输出
-x/--proxy 在给定的端口上使用HTTP代理
-#/--progress-bar 进度条显示当前的传送状态
01
基本用法
# curl http://www.baidu.com
执行后,www. baidu.com 的html就会显示在屏幕上了,此这个方法也常用于测试一台服务器是否可以到达一个网站。
02
获取网页返回值
# curl -o /dev/null -s -w %{http_code} www. baidu.com
这行命令一般用来测试网站是否正常。
对于测试网页,平常在服务器上使用curl -w通过返回的状态码来判断当前网页的状态,用curl命令探测一个网址一般使用以下的命令。
# curl -I -m 10 -o /dev/null -s -w %{http_code} https://www.baidu.com

-I只显示请求头信息
-m 10 最多查询10s
-o /dev/null 屏蔽原有输出信息
-s silent 模式,不输出任何东西
-w %{http_code} 控制额外输出
-w %{http_code} 中http_code即是网页返回的状态码,根据返回的状态码可以判断该网页的当前状态,一般正常网页会返回200表示OK的状态码。以下是http_code代表的各个状态码意义:
$http_code["0"]="Unable to access";
$http_code["100"]="Continue";
$http_code["101"]="Switching Protocols";
$http_code["200"]=”OK”;
$http_code["201"]=”Created”;
$http_code["202"]=”Accepted”;
$http_code["203"]=”Non-Authoritative Information”;
$http_code["204"]=”No Content”;
$http_code["205"]=”Reset Content”;
$http_code["206"]=”Partial Content”;
$http_code["300"]=”Multiple Choices”;
$http_code["301"]=”Moved Permanently”;
$http_code["302"]=”Found”;
$http_code["303"]=”See Other”;
$http_code["304"]=”Not Modified”;
$http_code["305"]=”Use Proxy”;
$http_code["306"]=”(Unused)”;
$http_code["307"]=”Temporary Redirect”;
$http_code["400"]=”Bad Request”;
$http_code["401"]=”Unauthorized”;
$http_code["402"]=”Payment Required”;
$http_code["403"]=”Forbidden”;
$http_code["404"]=”Not Found”;
$http_code["405"]=”Method Not Allowed”;
$http_code["406"]=”Not Acceptable”;
$http_code["407"]=”Proxy Authentication Required”;
$http_code["408"]=”Request Timeout”;
$http_code["409"]=”Conflict”;
$http_code["410"]=”Gone”;
$http_code["411"]=”Length Required”;
$http_code["412"]=”Precondition Failed”;
$http_code["413"]=”Request Entity Too Large”;
$http_code["414"]=”Request-URI Too Long”;
$http_code["415"]=”Unsupported Media Type”;
$http_code["416"]=”Requested Range Not Satisfiable”;
$http_code["417"]=”Expectation Failed”;
$http_code["500"]=”Internal Server Error”;
$http_code["501"]=”Not Implemented”;
$http_code["502"]=”Bad Gateway”;
$http_code["503"]=”Service Unavailable”;
$http_code["504"]=”Gateway Timeout”;
$http_code["505"]=”HTTP Version Not Supported”;
03
curl –w
curl的-w参数是一个非常重要的参数,对应非常多的参数变量,测试网页时可以得到对应的需求内容。
-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出。
输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,需要再输入一个%,即%%。curl会用合适的值来替代输出格式中的变量,除http_cod状态码外部分常用的可用变量如下:
url_effective 最终获取的url地址。
time_total 总时间,单位是秒,精确到小数点后三位。
time_namelookup DNS解析时间,从请求开始到DNS解析完毕所用时间。
time_connect 连接时间,从开始到建立TCP连接完成所用时间,包括前边DNS解析时间,如果需要单纯的得到连接时间,用这个time_connect时间减去time_namelookup时间。
time_appconnect 连接建立完成时间,如SSL/SSH等建立连接或者完成三次握手时间。
time_pretransfer 从开始到准备传输的时间。
time_redirect 重定向时间,包括到最后一次传输前的几次重定向的DNS解析,连接,预传输,传输时间。
time_starttransfer 开始传输时间。在发出请求之后,Web 服务器返回数据的第一个字节所用的时间。
以上的time相关变量可以用来判断服务器访问网页的各种连接时长,通过计算得到需求的各个连接时长情况,从而判断网页网络等状况。
例如:

结果如下:
time_connect: 0.234
time_starttransfer: 0.336
time_nslookup:0.220
time_total: 0.336
连接时间为0. 234,其中DNS解析时间用了0.220,可以判断DNS解析可能存在问题。
size_download 下载大小
size_upload 上传大小
size_header 下载的header的大小
size_request 请求的大小
speed_download 下载速度,单位-字节每秒
speed_upload 上传速度,单位-字节每秒
ssl_verify_result ssl认证结果,返回0表示认证成功
谢谢
阅读~