Я пытаюсь написать скрипт для обнаружения и удаления репозиториев GitHub, который мне больше не нужен, и у меня возникли проблемы с удалением части.
Я написал вспомогательную функцию, которая отправит запрос DELETE на api.github.com и вернет Promise.Но проблема в том, что я получаю 400 Bad Request при использовании этой функции, но этот же запрос прекрасно работает с curl.(Ответ должен быть 204 No Content).
Это версия «https».Переменная пути в порядке, я проверил это.Он возвращает неверный запрос 400.
const deleteRepo = (n, token) => {
const path = `repos/${n}`
console.log(path)
const options = {
method: 'DELETE',
hostname: 'api.github.com',
path,
headers: {
'Accept': '*/*',
'Authorization': `Basic ${Buffer.from(token).toString('base64')}`,
'User-Agent': 'curl/7.52.1'
},
}
return new Promise((resolve, reject) => {
const req = https.request(options, res => {
body = ''
res.on('data', c => body += c)
if (res.statusCode == 204) {
console.log('Deleted ', path)
res.on('end', () => {
reject(body)
})
resolve()
} else {
console.log('Error deleting ', path, res.statusCode, res.statusMessage)
res.on('end', () => {
reject(body)
})
}
res.on('error', (e) => reject(e))
});
req.end()
console.log(req)
})
}
Та же функция с curl работает, как и ожидалось, возвращая 204 No Content.
const cmd = `curl -v -u ${token} -X DELETE https://api.github.com/repos/${n}`
console.log('Deleting ', path)
console.log(child_process.execSync(cmd, (e, stdout, stderr)=> {
if (e) {
console.error(e);
throw e;
}
console.log('stdout ', stdout);
console.log('stderr ', stderr);
}))