繁体   English   中英

如何使用节点从私有仓库下载GitHub发布资源

[英]How to download GitHub release asset from private repo using node

我想使用node.js request模块从私有存储库下载发行资产。 使用以下cURL命令可以正常工作:

curl -O -J -L \
     -H "Accept: application/octet-stream" \
https://__TOKEN__:@api.github.com/repos/__USER__/__REPO__/releases/assets/__ASSET_ID__

但是当我尝试使用request模块时失败:

var request = require('request');

var headers = {
    'Accept': 'application/octet-stream'
};
var API_URL = "https://__TOKEN__:@api.github.com/repos/__USER__/__REPO__"
var ASSET_ID = __ASSET_ID__

var options = {
    url: `${API_URL}/releases/assets/${ASSET_ID}`,
    headers: headers,
};


function callback(error, response, body) {
    if (error) {
        console.error(error);
    }
    console.log(response.statusCode)
    if (!error && response.statusCode == 200) {
        console.log(body);
    }

    console.log(options.url);
}
var req = request(options, callback);
console.log(req.headers)

我已经仔细检查过,使用node时得到的URL与使用cURL时得到的URL相同。

我在响应中收到403 statusCode。 我不理解为什么。

更新:在查看实际发送的标头时,我发现它使用了

{ Accept: 'application/octet-stream',
  host: 'api.github.com',
  authorization: 'Basic __DIFFERENT_TOKEN__' }

我不明白为什么更改令牌。

一些参考: https : //gist.github.com/maxim/6e15aa45ba010ab030c4

GitHub API需要用户代理( https://github.com/request/request#custom-http-headers

同样重要的是,将编码设置为null以便在主体中具有缓冲区而不是字符串( 使用request在Node.js中获取二进制内容

因此,该代码的工作版本为:

var request = require('request');

var headers = {
    'Accept': 'application/octet-stream',
    'User-Agent': 'request module',
};
var API_URL = "https://__TOKEN__:@api.github.com/repos/__USER__/__REPO__"
var ASSET_ID = __ASSET_ID__

var options = {
    url: `${API_URL}/releases/assets/${ASSET_ID}`,
    headers: headers,
    encoding: null // we want a buffer and not a string
};


function callback(error, response, body) {
    if (error) {
        console.error(error);
    }
    console.log(response.statusCode)
    if (!error && response.statusCode == 200) {
        console.log(body);
    }

    console.log(options.url);
}
var req = request(options, callback);
console.log(req.headers)

感谢MarkoGrešak。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM