zoukankan      html  css  js  c++  java
  • node.js模块之http模块

    如果你想向远程服务器发起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 发送给远程服务器时,这会是个好主意。

  • 相关阅读:
    [Wap] 制作自定义WmlListAdapter来实现Mobile.List控件的各种效果
    [EntLib]UAB(Updater Application Block)下载
    jarhoo是一个很棒的地方
    [GoogleMap]利用GoogleMap地图的这个应用真是太狠了[1]
    [J2ME] VideoCoolala(MobileWebCam)开源说明
    [p2p]手机是否可以通过JXTA网络与PC机/PocketPC/WindowsMobile实现P2P呢?
    Android Layout XML属性
    什么是9.png
    android主流UI布局
    Android开发之旅: Intents和Intent Filters(理论部分)
  • 原文地址:https://www.cnblogs.com/youxin/p/3963445.html
Copyright © 2011-2022 走看看