如果你想向远程服务器发起HTTP 连接,Node 也是很好的选择。Node 在许多情景下都很适合使用,如使用Web service,连接到文档数据库,或是抓取网页。你可以使用同样的http 模块来发起HTTP 请求,但应该使用http.ClientRequest 类。该类有两个工厂方法:一个通用的方法和一个便捷的方法。

var http = require('http');
var opts = {
host: 'www.google.com'

port: 80,
path: '/',
method: 'GET'
};
var req = http.request(opts, function(res) {
console.log(res);
res.on('data', function(data) {
console.log(data);
});
});
req.end();

(method)是可选项,如果没有指定,默认会设置为GET。最后需要注意的一点是,需要结束(end())该请求。因为这是一个GET 请求,所以我们并不会往服务器发送任何数据。但对于其他的HTTP 方法,比如PUT 或POST,你可能需要发送数据。request 会等待end() 方法调用后,才初始化HTTP请求,因为在那之前,它不确定我们是否还会发送数据。

GET 是很常见的HTTP 使用方式,因此提供了一个专门的工厂方法来更方便地使用
它,如例4-10 所示。

var http = require('http');
var opts = {
host: 'www.google.com'
port: 80,
path: '/',
};

var req = http.get(opts, function(res) {
console.log(res);
res.on('data', function(data) {
console.log(data);
});
});

这个例子的http.get() 和之前的例子做了一样的事情,但更加明确。我们把method属性从配置对象中去掉了,还把request.end() 也移除了,因为这些都已经隐含说明了。如果运行了这两个例子,你得到的结果将是Buffer 对象的裸数据。本章后续会介绍到,Buffer 是Node 特殊定义的类,用来支持任意二进制数据的存储。虽然你也可以直接使用这些内容,但通常要指定编码方式,如UTF-8(一种Unicode 字符的编码格式),这可以通过response.setEncoding() 方法来指定.

> var http = require('http');
> var req = http.get({host:'www.google.com', port:80, path:'/'},
function(res) {
... console.log(res);
... res.on('data', function(c) { console.log(c); });
... });
> <Buffer 3c 21 64 6f 63 74 79 70
...
65 2e 73 74>
<Buffer 61 72 74 54 69
...
69 70 74 3e>
>
> var req = http.get({host:'www.google.com', port:80, path:'/'},
function(res) {
... res.setEncoding('utf8');
... res.on('data', function(c) { console.log(c); });
... });
> <!doctype html><html><head><meta http-equiv="content-type
...
load.t.prt=(f=(new Date).getTime());
})();
</script>

发送HTTP POST 和PUT 数据
不是所有的HTTP 请求都是用GET 方法的,你还需要调用POST、PUT 和其他HTTP
方法,它们会改变对方的数据。这和发送GET 请求的功能一样,只不过你还需要往
上发送一些数据(例4-12)。

var options = {
host: 'www.example.com',
port: 80,
path: '/submit',
method: 'POST'
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.write("my data");
req.write("more of my data");
req.end();
这个例子和例4-10 很相似, 但增加了http.ClientRequest.write() 方法。可以用这个方法发送上行数据流。之前解释过, 它要求你显式地调用http.ClientRequest.end() 方法来表示数据发送完毕。每当调用ClientRequest.write() 时,数据会马上上传(不会被缓存),但服务器在ClientRequest.end()调用之前是不会响应你的数据请求的。你可以把一个流(Stream)的data 事件和ClientRequest.write() 绑定在一起,这样就能把数据以流的形式发送给服务器了。比如当需要把硬盘上的一个文件通过HTTP 发送给远程服务器时,这会是个好主意。

node.js模块之http模块的更多相关文章

  1. node.js(七) 子进程 child_process模块

    众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,通过多进程来实现 ...

  2. node.js第二天之模块

    一.模块的定义 1.在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分. 2.狭义的说,每一个JavaScript文件都是一个 ...

  3. node.js中使用http模块创建服务器和客户端

    node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...

  4. 使用Node.js的socket.io模块开发实时web程序

    首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统 ...

  5. Node.js权威指南 (4) - 模块与npm包管理工具

    4.1 核心模块与文件模块 / 574.2 从模块外部访问模块内的成员 / 58 4.2.1 使用exports对象 / 58 4.2.2 将模块定义为类 / 58 4.2.3 为模块类定义类变量或类 ...

  6. node.js的fs核心模块读写文件操作 -----由浅入深

    node.js 里fs模块 常用的功能 实现文件的读写 目录的操作 - 同步和异步共存 ,有异步不用同步 - fs.readFile 都不能读取比运行内存大的文件,如果文件偏大也不会使用readFil ...

  7. 转 node.js里面的http模块深入理解

    问题1:HTTP服务继承了TCP服务模型,是从connection为单位的服务到以request为单位的服务的封装,那么request事件何时触发? 注意:在开启keepalive后,一个TCP会话可 ...

  8. node.js中path路径模块的使用

    path模块是node.js中处理路径的核心模块.可以很方便的处理关于文件路径的问题. join() 将多个参数值合并成一个路径 const path = require('path'); conso ...

  9. node.js中fs文件系统模块的使用

    node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作. fs模块中,所有的方法分为同步和异步两种实现. 有 sync 后缀的方法为同步方法,没有 sync 后缀的方法 ...

  10. 编写浏览器和Node.js通用的JavaScript模块

    长期以来JavaScript语言本身不提供模块化的支持, ES6中终于给出了 from, import等关键字来进行模块化的代码组织. 但CommonJS.AMD等规范已经被广为使用,如果希望你的Ja ...

随机推荐

  1. [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题

    1.函数 1.什么是函数? 定义在类中的具有特定功能的一段独立小程序. 函数也叫做方法 2.函数的格式 修饰符   返回值类型    函数名(参数类型  形式参数1, 参数类型  形式参数2-) { ...

  2. 【转载】分享下多年积累的对JAVA程序员成长之路的总结

    注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看. 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博, ...

  3. 破解网络投票IP限制、验证码限制、COokie限制、Seesion限制的方法!(转)

    顾名思义,网络投票就是在网络上进行的投票活动,但和其他类型的投票不同的是:网络投票是建立在网络投票系统上的,而结果完全由程序输出,无需人工参与.这既是网络投票系统的优点也是其缺点,没有了人工的参与,其 ...

  4. C# 白话系列之——白话委托

    今天看到首页有个委托的文章,但大都写的太专业,而且没有实用的例子场景.正好昨天做了一个有关委托的功能,所以也来凑个热闹,用白话掰掰 一.委托是什么 我们都知道数据类型,简单点的如,想给一个变量赋值整数 ...

  5. 监控SQL Server的job执行情况

    在服务器没有设置发邮件并且不允许发邮件的情况下, 可以通过下列语句来检查SQL Server 的job的执行情况 select top 150 a.run_date,a.run_time, b.nam ...

  6. poj 1236 Network of Schools(又是强连通分量+缩点)

    http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  7. iOS 网络编程

    iOS 开发中所需的数据基本都是来自网络,网络数据请求是 iOS 编程中必不可少的,应该熟练掌握网络请求. 网络请求方式有 :GET , POST , PUT ,DELETE 等,其中常用的就是 GE ...

  8. 如何使用PHP实现一个WebService

    WSDL WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问.这种文 ...

  9. zoj 3720

    为什么注释掉的地方是错的?  自己的代码好糟烂..... 直接枚举点  判是否在多边形内  加起来求概率    求面积的时候代码写搓了....     比不过别人两行的代码    而且到现在还找不到错 ...

  10. Scrum中的User Story

    我们通常用User Story来描述Backlog里的各个Backlog项,User Story是从用户的角度对系统的某个功能模块所作的简短描述.一个User Story描述了项目中的一个小功能,以及 ...