Ax ios установить Content-Length вручную, nodeJS - PullRequest
0 голосов
/ 28 января 2020

Можно ли отправить запрос на публикацию в nodeJS и указать длину содержимого.

Я пытался (используя топор ios):

let data = `Some text data...........`;

let form = await Axios.post(
    "url.......",
    data,
    {
        headers: {
            Authentication: "token.....",
            "Content-Type": "multipart/form-data; boundary=c9236fb18bed42c49590f58f8cc327e3",
            //set content-length manually 
            "Content-Length": "268"
        }
    }
).catch(e => e);

Это не не работает, длина автоматически устанавливается на значение, отличное от того, которое я передаю.

Я использую топор ios, но открыт для использования любым другим способом публикации с nodeJS.

1 Ответ

2 голосов
/ 28 января 2020

В Axios, если данные присутствуют, будет установлена ​​длина, рассчитанная по данным, поэтому даже если вы передадите заголовок content-length, он будет переопределен кодом: enter image description here

Проверьте это для более подробной информации: https://github.com/axios/axios/blob/master/lib/adapters/http.js

Используя модуль http или https, вы можете сделать:

const https = require('https')

const data = JSON.stringify({
  key:values
})

const options = {
  hostname: 'example.com',
  port: 443,
  path: '/testpath',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
}
const req = https.request(options, (res) => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', (d) => {
    process.stdout.write(d)
  })
})

req.on('error', (error) => {
  console.error(error)
})

req.write(data)
req.end()
...