在Node.js中,也可以很轻松地向任何网站发送请求并读取该网站的响应数据。在http模块中,可以使用request方法向其他网站请求数据。
var req=http.request(options,callback)
function (response) {
//回调函数代码略
}
在使用了request方法后,可以使用http.ClientRequest对象的write方法向目标网站发送数据
request.write(chunk,[encoding])
request.end([chunk],[encoding])
var http = require('http');
var options = {
hostname: 'www.microsoft.com',
port: 80,
path: '/',
method: 'GET'
};
var req = http.request(options,function(res) {
console.log('状态码: ' + res.statusCode);
console.log('响应头: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('响应内容: '+chunk);
});
});
req.end();
可以使用http.ClientRequest对象的abort方法终止本次请求
request.abort
request.setTimeout(timeout,[callback])
示例:
var http=require('http');
var url=require('url');
var server = http.createServer(function(sreq, sres) {
var url_parts = url.parse(sreq.url);
var opts = {
host: 'www.amazon.cn',
port: 80,
path: url_parts.pathname,
headers: sreq.headers
};
var creq = http.get(opts, function(cres) {
sres.writeHead(cres.statusCode, cres.headers);
cres.pipe(sres);
});
sreq.pipe(creq);
});
server.listen(1337, '127.0.0.1');
在Node.js中,提供了一个https模块,专用于创建HTTPS服务器与客户端。
在创建HTTPS服务器之前,服务器端首先需要创建公钥、私钥及证书,步骤如下
openssl genrsa -out privatekey.pem 1024
openssl req -new -key privatekey.pem -out certrequest.csr
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
x509参数表示该证书符合国际电信联盟制定的数字证书标准。在客户端与服务器端建立连接后,将首先确认证书的合法性。如果在服务器中使用学习或测试用证书,使用浏览器访问该服务器时,浏览器中将显示一个警告信息,警告用户该证书不是一个经过证书授证中心签名的证书。
在具备了证书文件之后,可以使用该证书文件创建一个pfx文件。所谓pfx文件,是指该文件内容必须符合公钥加密技术12号标准(Public Key CryptographyStandards#12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书而指定的
格式。
在openssl工具中,可以使用如下所示的命令创建pfx文件。
openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem -out certificate.pfx
在这些文件(其中pfx文件为可选用文件)具备了之后,可以使用https模块中的createServer方法创建一个HTTPS服务器
https.createServer(options,[requestListener])
function (request,response) {
//回调函数代码略
}
在创建了HTTPS服务器之后,我们需要指定该服务器所要监听的地址(可以为一个IP地址,也可以为一个主机名)及端口,这时,我们可以使用该HTTPS服务器的listen方法
server.listen(port,[host],[backlog],[callback])
关闭服务器
server.close();
在https模块中,可以使用request方法向其他使用HTTPS协议的网站请求数据。
var req=https.request(options,callback)
当在options参数值对象中使用如下所示的属性及属性值时,不能使用全局https.Agent对象。