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

この簡単な「n」ダーティな例で私がしているように決してそれをしないでください。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);
});

どういうわけか、GETリクエストの代わりにPOSTを送信すると、別のページが表示されました。だから私はそのビットを変更しました...

console.log()2番目の質問について:いいえ、ステートメントを保持する必要はありません。コールバックを使用するだけで、すべて問題ありません。:-)

于 2012-04-04T07:31:24.150 に答える