curl模拟REST请求

大数据平台常常需要提供web端管理界面,比如Hadoop内嵌的基于jetty的监控页面、Kylin内嵌的基于tomcat的管理界面。虽说这些Web应用面向企业内部,QPS远远比不上淘宝这种面向C端的网站,但对于大数据平台开发工程师来说,基本的Web开发能力是必不可少的。出于开发效率和个人发展方向的考虑,我之前开发Web系统更多是基于一定的模板,配置都拷贝粘贴而来,不求甚解。然而随着开发的深入,尤其是面向产品运营人员的智能报表系统的研发,我发现之前的知识储备完全不够用。因此,接下来一段时间我会暂时放下大数据组件的学习而专注于Web技术。

这次我就讲讲如何使用curl来调试REST接口(当然curl的功能远不止于此)。

正文

根据官方文档,curl是一个用于与服务器通信的工具,可以支持多种协议(包括DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP)。Curl被设计为不需要用户交互式操作,所有参数通过一次执行完成(反例之一是python shell,需要多次输入命令)。在Web开发方面经常用于模拟浏览器请求,比如REST接口的HTTP GET/POST/HEAD/PUT/DELETE/OPTIONS。

命令格式:
curl [OPTIONS] [URL...]

HTTP GET

$curl -G [url]

curl http get

-G选项是可选的,HTTP协议默认的请求类型就是GET。

默认情况下,curl并不会自动重定向,加上-L选项可以启用它。

如果希望打印头部内容可加上-i(--header)选项:

curl http get with header

Curl默认将返回结果打印到标准输出,可以用-o [file]或者shell重定向(>)命令可以将结果写到文件中。

HTTP POST

$curl -d [post_body] [url]

-d指定HTTP POST的请求体内容,启用该参数后curl会以HTTP POST的方式发送数据到指定URL,默认的contentType是application/x-www-form-urlencoded。鉴于现在Web接口多以application/json形式交互,可以加上-H Content-Type:application/json 参数来覆盖默认的HTTP头部属性,这个头部在经过重定向之后依然有效。

HTTP HEAD

$curl -I [url]

HEAD请求可以使用-I选项,此时服务器只返回HTTP头部信息。

curl http head

HTTP PUT

HTTP PUT经常用于上传资源,对应的curl命令是$curl -T [file]
eg. 上传图片到图片服务器 curl -T "img[1-1000].png" http://www.picserver.com/upload

HTTP DELETE

$curl -X DELETE -d [request_body] [url]

-X选项用于改写HTTP的谓词。一般情况下大多数谓词都不需要通过该参数显式指定,例如-d对应的谓词是POST,-T对应的谓词是PUT,不过DELETE是个例外。

HTTP OPTIONS

$curl -X OPTIONS -v [url]

curl http options

-v选项用于打印详细信息,对于OPTIONS请求一定要加上,否则请求会失败。

本文是原创文章,转载请注明:时间与精神的小屋 - curl模拟REST请求