0

NOOb在这里。我有一个 HTTP 请求,它从特定网页中提取所有内容。但是,我只需要一个特定的字符串:"Most recent instantaneous value: ". 事实上,我实际上需要存储后面的值value:。这是我的代码:

var http = require("http");

var options = {
 host: 'waterdata.usgs.gov',
 port: 80,
 path: '/ga/nwis/uv?cb_72036=on&cb_00062=on&format=gif_default&period=1&site_no=02334400',
 method: 'POST'
};

var req = http.request(options, function(res) {
 console.log('STATUS: ' + res.statusCode);
 console.log('HEADERS: ' + JSON.stringify(res.headers));
 res.setEncoding('utf8');
 res.on('data', function (chunk) {
 console.log('BODY: ' + chunk);
 });
});

req.on('error', function(e) {
 console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

我意识到我不需要所有的console.log陈述,但我需要保留console.log('BODY: ' + chunk);所有的数据下载吗?

4

1 回答 1

0

永远不要像我在这个 quick'n'dirty 示例中那样做。有很多用于 DOM 遍历、HTML/XML 解析等 模块......它们比简单的正则表达式更安全但就这样你得到了一般的想法:

var http = require("http");

var options = {
    host: 'waterdata.usgs.gov',
    port: 80,
    path: '/ga/nwis/uv?cb_72036=on&cb_00062=on&format=gif_default&period=1&site_no=02334400',
};

function extract (body, cb) {
    if(!body) 
        return;

    var matches=body.match(/Most recent instantaneous value: ([^ ]+) /);
    if(matches)
        cb(matches[1]);
}

http.get(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        extract(chunk, function(v){ console.log(v); });
    });
}).on('error', function(e) {
    console.log('problem with request: ' + e.message);
});

不知何故,在发送 POST 而不是 GET 请求时,我也得到了一个不同的页面。所以我改变了一点......

关于你的第二个问题:不,你不需要保留任何console.log()陈述。只需使用回调,一切都很好!:-)

于 2012-04-04T07:31:24.150 回答