【问题标题】:Pull a specific string from an HTTP request in node.js从 node.js 中的 HTTP 请求中提取特定字符串
【发布时间】:2012-04-17 19:35:05
【问题描述】:

这里没有。我有一个 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); 以便所有数据下载吗?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    永远不要像我在这个简单粗暴的例子中那样做。有 plenty of modules 用于 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() 语句。只需使用回调,一切都很好! :-)

    【讨论】:

    • 谢谢。为什么你认为这种做法不安全?此外,此解决方案正在打印字符串的两个实例。我只需要第一个实例。我需要修饰符还是什么?
    • 弄清楚为什么要打印两次数据。
    • 如果只需要第一个值,只需在回调前面添加一个返回即可。关于解析 HTML 的话题,我建议阅读 Jeff's opinion 关于它,当然还有这个答案:stackoverflow.com/a/1732454/479133
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多