【问题标题】:Node.js https fails, whereas browser, `curl` & `wget` succeed?Node.js https 失败,而浏览器,`curl` & `wget` 成功?
【发布时间】:2019-05-23 15:50:29
【问题描述】:

后续请求:

$ url='https://svn.tools.ietf.org/svn/tools/xml2rfc/trunk/cli/xml2rfc/data/xml2rfc.css'
$ curl "$url"
$ wget -qO - "$url"
$ python -c 'import webbrowser; webbrowser.open("'"$url"'", new=2)'

请求失败:

$ echo 'require("https").get("'"$url"'", res => console.info("statusCode:", res.statusCode, ";"));' | node

失败请求的输出:

statusCode: 403 ;

【问题讨论】:

    标签: node.js https http-headers http-status-code-403 node-https


    【解决方案1】:

    我假设您正在尝试从您无权访问的远程服务器获取文件。当您使用 nodejs https 包调用远程服务器时,您必须设置用户代理。试试这个代码:

    let https = require('https')
    let pageUrl = 'https://svn.tools.ietf.org/svn/tools/xml2rfc/trunk/cli/xml2rfc/data/xml2rfc.css'
    let url = require('url')
    
    let options = url.parse(pageUrl)
    options.headers = {
        'User-Agent': 'request'
    };
    let req = https.get(options, (res) => {
        console.log("statusCode: ", res.statusCode);
        console.log("headers: ", res.headers);
        let data = ""
        res.on('data', (chunk) => {
            data += chunk
        })
    
        res.on('end', (chunk) => {
            console.log("ended")
            console.log(data)
        })
    })
    

    【讨论】:

    • 谢谢,成功了。奇怪的是 User-Agent 需要设置,这不是默认设置。
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 2019-12-11
    • 2012-07-11
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    相关资源
    最近更新 更多