Как рассчитать длину содержимого POST-запроса к API в bash?

#bash #api #post #mime-types #content-length

#bash #API #Публикация #mime-типы #длина содержимого

Вопрос:

Я использую скрипт bash для отправки POST-запроса в RESTful API.

Длина содержимого неверна. Пожалуйста, помогите узнать, правильно ли я его рассчитываю.

Добавляет ли POST-запрос еще несколько байтов внутри моего запроса?

Тело запроса (это точно такое же тело, за исключением того, что информация замаскирована с помощью X, x или 0):

 --1234
Content-Disposition: form-data; name="xxxxx"

XXX-XX
--1234
Content-Disposition: form-data; name="xxx_xxxx"

XXXX00000000Xx0000000000000000000XX00.pdf
--1234
Content-Disposition: form-data; name="xxx_xx"

XXXX00000000Xx0000000000000000000XX00
--1234--

  

Я установил его 271, и его API зафиксировал следующее:

 --1234
Content-Disposition: form-data; name="xxxxx"

XXX-XX
--1234
Content-Disposition: form-data; name="xxx_xxxx"

XXXX00000000Xx0000000000000000000XX00.pdf
--1234
Content-Disposition: form-data; name="xxx_xx"

XXXX00000000Xx0000000000000000000XX00

  

Ответ №1:

Мое предложение не изобретать велосипед. Такие инструменты, как cURL, создают эти запросы с составными частями / данными формы удобным и надежным способом, и нет необходимости самостоятельно вычислять длину содержимого:

Вот как вы указываете свой запрос в виде команды cURL:

 curl 
--request POST 
--header 'Content-Type: multipart/form-data' 
--form 'xxxxx=XXX-XX' 
--form 'xxx_xxxx=XXXX00000000Xx0000000000000000000XX00.pdf' 
--form 'xxx_xx=XXXX00000000Xx0000000000000000000XX00' 
$'http://example.com/'
  

И вот как может выглядеть ваш результирующий необработанный запрос. Обратите внимание, что cURL включил правильный заголовок длины содержимого:

 POST / HTTP/1.1
Host: example.com
User-Agent: curl/7.60.0
Accept: */*
Content-Length: 416
Content-Type: multipart/form-data; boundary=------------------------b5a1c465b6242b10
Connection: close

--------------------------b5a1c465b6242b10
Content-Disposition: form-data; name="xxxxx"

XXX-XX
--------------------------b5a1c465b6242b10
Content-Disposition: form-data; name="xxx_xxxx"

XXXX00000000Xx0000000000000000000XX00.pdf
--------------------------b5a1c465b6242b10
Content-Disposition: form-data; name="xxx_xx"

XXXX00000000Xx0000000000000000000XX00
--------------------------b5a1c465b6242b10--
  

Комментарии:

1. Большое спасибо! @lab9 Я понимаю. Однако я не могу использовать curl, wget на своем сервере. Вот почему я должен попробовать скрипт bash. Я ценю усилия, которые вы тратите, чтобы ответить на мой вопрос. 🙂