如何在bash中计算对API的POST请求的Content-Length?

问题描述

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...