curl命令应用八例

IP Address: 54.224.60.122



curl命令是Unix和Linux系统中发送HTTP请求的基本命令,它是cURL软件包的一个组成部分。curl不仅可以用来发送HTTP请求,还可以使用FTP协议发送文件以及使用SMTP协议发送邮件。cURL工具包就支持更多的网络应用协议,对于使用网络服务的用户来说就十分有用,这里就不做过多介绍。

curl命令可以在Unix/Linux命令行模式下调用网络服务,接收响应,检查web服务器是否工作正常,你甚至可以编写crul命令的检测脚本来方便监控服务器状态。curl命令是另一个发送HTTP请求的wget命令有相同的功能,但是curl支持更多的协议。

curl命令一般在类Unix系统都会安装,你也可以访问其官方网站下载cURL包的最新版。不同的Linux发版都会提供cURL的软件包,因为这个工具太好用了。

本文将实例演示在Linux系统使用curl命令。你可以通过curl命令来测试网站的REST API,测试网络应用是否工作正常以及编写脚本来监控服务器状态。

1] 发送HTTP请求

你可以使用curl命令以及wget命令来发送HTTP请求,使用时直接输入请求网址即可,如下所示:

 # curl https://www.daehub.com

不带任何参数的话,curl命令会得到该网站的html源代码,就如果浏览器得到的结果是一样,只不过浏览器会自动将html代码转换为方便用户阅读的样子。默认情况下,curl命令可以发送”GET”方式的HTTP请求,你可以在HTTP请求加入请求参数,就如同在浏览器中输入一样。例如我们想使用openweathermap.org的天气查询API来请求London的当前天气(因为不是注册用户,只好使用API示例示意),以可以通过curl带有查询的网址来实现:

 # curl api.openweathermap.org/data/2.5/weather?q=London

当一个请求含有多个条件时,需要将整条请求用”””包含起来,因为多条件是会使用”&”符号,而这个符号在shell中又具有其它含义,所以多条件时需要按以下格式使用curl命令:

 # curl 'http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139'

2] 在类Unix系统如何为HTTP请求设置超时时限

下面一个有趣的例子是给curl命令加入-m 参数,这样就会给HTTP请求设置一个超时时限。当服务器超过时限而没有响应的时候,curl命令会自动退出:

 # curl -m 3 'http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139'

以上命令就设置了超时时限3秒,当然,-m参数还有其它含义,例如连接重定向的次数以及下载文件的最大容量等。为了方便区分,你也可以使用长参数格式” –max-time, –max-redirs and –max-filesize”来区别不同的功能,单独使用-m时默认表示最长等待时间,单位为秒。

3] 如何发送POST请求

使用curl -X 命令,就可以发送所有格式的HTTP请求。由于curl默认采用GET方式发送请求,也可以通过-X参数将请求方式转换为POST,示例如下:

 # curl -X POST http://api.openweathermap.org

上面的命令的确是将请求方式转换为POST了,但是没有任何内容的POST请求是没有意义的,于是下面请演示如何发送带有内容的POST请求。

4] 如何在HTTP POST请求中加入数据

使用 curl命令的-d参数,就可以发送带有数据的POST请求,-d仅表示POST的内容,同样,如果内容有多个时,需要用”号括起,当然也可以多次使用-d 参数,效果是一样的,示例如下:

 # curl -d 'lat=35&lon=139' http://api.openweathermap.org/data/2.5/weather
 # curl -d lat=35 -d lon=139 http://api.openweathermap.org/data/2.5/weather

所以-d参数多用来模拟向服务器提交HTML表单。

5] 如何以HTTP POST方式发送文件

如果请求的数据很多,那么就可以将它们存储成文件并通过curl命令提交给服务器。curl命令只需要知道请求的文件名,就会以POST文件把文件发送给服务器。例如要发送requestData.txt文件,则命令示例如下:

 # curl -d @requestData.txt http://api.openweathermap.org/data/2.5/weather

“@”符会告知curl其后面跟的是一个文件名,当然这个文件需要采用URL编码。如果喜欢使用长参数格式的话,则–data即可。

6] 使用curl命令发送用户名和密码进行认证

可以通过-u参数来达到发送用户名和密码进行谁的目的,-u参数指代的是–user,专用用于处理服务器的用户认证。例如使用如下命令就可以通过POST方式向网站发送了认证请求:

 # curl -u username:password -d content='New content' https://www.daehub.com/content/content.xml

命令中的”username:password”就是实际使用的用户名和密码。如果不想在shell命令历史记录中保存password信息,那么也可以在命令中将password部分省略,这样会在命令执行时提示输入密码。

7] 如何用curl命令指定HTTP头

可以使用-H参数来为curl指定HTTP头信息。目前web服务器的响应格式多为xml或者json,这样就需要在请求时指定相应的数据格式,”application/json”和”application/xml”用以指定json和xml格式,命令示例如下:

 # curl -H "Accept: application/json" 'http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139'

8] 如何查看HTTP响应头

可以使用-I参数来查看HTTP响应头,示例如下:

 # curl -I https://www.daehub.com

由于web服务的种类越来越多,了解服务器的头信息,可以很方便的设计应用来使用web服务接口。命令执行结果如下所示:

以上就是一些简单的curl命令示例,可以把curl想像成一个没有图形界面的浏览器,可以通过它来完成发送HTTP请求以及接收响应的全过程,这对于没有图形化界面的类Unix用户完成检测和调试web服务工作就显得尤为重要。

发表评论

电子邮件地址不会被公开。 必填项已用*标注