使用 Node.js 从 URL 读取内容

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6287297/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 14:16:11  来源:igfitidea点击:

Reading content from URL with Node.js

node.js

提问by Luke

I'm trying to read the content from a URL with Node.js but all I seem to get are a bunch of bytes. I'm obviously doing something wrong but I'm not sure what. This is the code I currently have:

我正在尝试使用 Node.js 从 URL 读取内容,但我似乎得到的只是一堆字节。我显然做错了什么,但我不确定是什么。这是我目前拥有的代码:

var http = require('http');

var client = http.createClient(80, "google.com");
request = client.request();
request.on('response', function( res ) {
    res.on('data', function( data ) {
        console.log( data );
    } );
} );
request.end();

Any insight would be greatly appreciated.

任何见解将不胜感激。

回答by user896993

try using the on error event of the client to find the issue.

尝试使用客户端的 on error 事件来查找问题。

var http = require('http');

var options = {
    host: 'google.com',
    path: '/'
}
var request = http.request(options, function (res) {
    var data = '';
    res.on('data', function (chunk) {
        data += chunk;
    });
    res.on('end', function () {
        console.log(data);

    });
});
request.on('error', function (e) {
    console.log(e.message);
});
request.end();

回答by sidanmor

HTTP and HTTPS:

HTTP 和 HTTPS:

const getScript = (url) => {
    return new Promise((resolve, reject) => {
        const http      = require('http'),
              https     = require('https');

        let client = http;

        if (url.toString().indexOf("https") === 0) {
            client = https;
        }

        client.get(url, (resp) => {
            let data = '';

            // A chunk of data has been recieved.
            resp.on('data', (chunk) => {
                data += chunk;
            });

            // The whole response has been received. Print out the result.
            resp.on('end', () => {
                resolve(data);
            });

        }).on("error", (err) => {
            reject(err);
        });
    });
};

(async (url) => {
    console.log(await getScript(url));
})('https://sidanmor.com/');

回答by Mark Kahn

the data object is a buffer of bytes. Simply call .toString()to get human-readable code:

数据对象是一个字节缓冲区。只需调用.toString()即可获取人类可读的代码:

console.log( data.toString() );

reference: Node.js buffers

参考:Node.js 缓冲区