最简单的HTTP客户端
最后更新于:2022-04-01 10:51:41
## 问题
你想创建一个HTTP客户端
## 方法
在本菜谱中,我们将使用[node.js](http://nodejs.org/)的HTTP库。我们先从一个简单的GET请求示例开始,然后实现可以返回电脑真实IP的客户端。
## GET些啥
~~~
http = require 'http'
http.get { host: 'www.google.com' }, (res) ->
console.log res.statusCode
~~~
`get`函数是node.js的`http`模块提供,可以向HTTP服务器发送一个GET请求。响应会以回调的形式返回,我们可以在一个函数中处理它。本例只是简单地把响应的状态码打印出来。请看:
~~~
$ coffee http-client.coffee
200
~~~
### 我的IP地址是多杀?
如果你处在一个像LAN这样的网络中,依赖于[NAT](http://en.wikipedia.org/wiki/Network_address_translation),你有时候可能会碰到这样的问题,我真实的IP地址是多少呢?让我编写一小段coffeescript来搞定它:
~~~
http = require 'http'
http.get { host: 'checkip.dyndns.org' }, (res) ->
data = ''
res.on 'data', (chunk) ->
data += chunk.toString()
res.on 'end', () ->
console.log data.match(/([0-9]+\.){3}[0-9]+/)[0]
~~~
我们可以监听`'data'`事件,从返回的对象中获取数据;并且当`'end'`事件触发时,我们可以知道数据传送完了。当传送结束时,我们可以使用一个简单的正则表达式来匹配出我们的IP地址,试试看:
~~~
$ coffee http-client.coffee
123.123.123.123
~~~
## 详解
要知道`http.get`是`http.request`的快捷方式。后者允许你使用不同的方法发送HTTP请求,比如说POST或者PUT。
关于这个主题的API或者更为详细的信息,请参考[http](http://nodejs.org/docs/latest/api/http.html)以及[https](http://nodejs.org/docs/latest/api/https.html)这两页文档。而且[HTTP spec](http://www.ietf.org/rfc/rfc2616.txt)迟早也会用到。
### 练习
* 基于[Basic HTTP Server](http://island205.com/coffeescript-cookbook.github.com/chapters/networking/basic-http-server),创建一个针对键值对存储的HTTP服务器的客户端。