如何在 bash 中计算对 API 的 POST 请求的内容长度?

How to calculate Content-Length of a POST request to API in bash?

我正在使用 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

我的建议是不要重新发明轮子。 cURL 等工具以方便可靠的方式创建那些 multipart/form-data 请求,并且无需计算 Content-Length靠自己:

以下是将请求指定为 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 包含正确的 Content-Length header:

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--