Node-got請求發送不了formData數據的坑


今天使用node got模塊遇到了content-type=form-data 發送不了數據到后端的問題,看看我原來的代碼。

var gotSend = require('got'). var FormData = require('form-data'); try {     let form = new FormData();     form.append('my_file', fs.createReadStream('/foo/bar.jpg'));     form.append('a', "123");     var got = gotSend({         "url": "https://echo.apipost.cn/get.php",         "method": "POST",         "headers": {             "Accept": "*/*",             "Accept-Language": "zh-CN",             "Origin": "https://echo.apipost.cn",             "content-type": "multipart/form-data",             "cookie": "a=1"         },         "responseType": "buffer",         "timeout": 25000,         "https": {             "rejectUnauthorized": false         },         "decompress": true,         "body": form     })     let res = await got // res  response 對象 } catch (error) {     //請求發送錯誤 }

結果這樣發送到后端,后端接收不到FormData的數據。

那就很奇怪了,我明明是按照官方給的例子發的FormData數據,怎么后端會接收不到呢。官方例子如下:

難道我哪里參數傳的有問題?

於是在我不懈努力一個一個參數去掉與后端聯調的情況下,終於讓我發現了問題。居然是在headers里content-type導致的。

 

"content-type" : “multipart/form-data”, 這個參數去掉就可以正常發送數據了,

 

我之前用request的時候,也是這樣傳請求頭的,可為什么got就不行了呢,我不填content-type到后端的請求頭到底是怎么樣的呢 ?

於是我帶着疑問偷偷去看了一眼后台接收到的請求數據。

嗯? 加了boundary,這下明白了,原來用request請求的時候reqeust包會在我寫的content-type后面自動拼上boundary,可是got在我寫了content-type的情況下不會覆蓋我自己寫的content-type。這樣導致沒有參數分隔符,所以后端接收不到數據。

 

所以在got不更新這一塊邏輯的情況下的結論是:

got使用form-data傳參的時候

 

1.不要自己在headers里加content-type got會給我們加好

2.自己動手,在content-type后面拼上正常的boundary

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM