如何将CURL -F @filename转换为nodejs

时间:2018-01-16 10:17:59

标签: javascript node.js curl veracode node-fetch

我必须在nodejs javascript中翻译一个有效的curl请求。我之前的类似查询确实没有成功,并没有暗示文件传输。

curl --compressed -u $username:$password https://analysiscenter.veracode.com/api/5.0/uploadfile.do -F "app_id=1" -F "file=@package.zip"

我当前的,不工作的代码:

const fetch = require("node-fetch")

const b = new Buffer(myUsername + ":" + myPassword)
const s = b.toString('base64')

let uploadFileForm = new FormData()
uploadFileForm.append('app_id', "1")
uploadFileForm.append('file', fs.createReadStream('package.zip'))

header = {
    "Authorization": `Basic ${s}`,
    "Content-Type": 'multipart/form-data; boundary=' + form.getBoundary()
}

fetch("https://analysiscenter.veracode.com/api/4.0/uploadfile.do",
    {
        method: 'POST',
        header,
        body: uploadFileForm
    })
    .then(res => {
        return res.text()
    })
    .then(body => {
        console.log(body)
    })

我使用完全相同的身份验证过程来调用api和其他请求。

更新

根据建议,我更改了代码以设置标题中的边界。现在标题看起来像这样:

{ Authorization: 'Basic anVsaWVuLmZleWV1eEAzZHMuY29tOjVZQzA1RlVlTmpBNWdGZF5EMVRYMEQyJFNrTEdNTA==',
  'content-type': 'multipart/form-data; boundary=--------------------------439864217372737605994368' }

它仍然无法运作

1 个答案:

答案 0 :(得分:0)

决议:

问题是一个小的js错误,因为node-fetch期待标题,而我提供标题

然而,由于缺乏节点和网络,很难看到这一点。调试工具。

我使用另一台服务器检查最终请求标头并了解出现了什么问题。

再次感谢@CBroe提供有关如何解决此类问题的方法提示。