curl,API请求在失眠中有效,但在curl生成代码中无效

iq0todco  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(164)

我在Insomnia中有请求。当我通过Insomnia发送它时,没有问题。但是当我生成curl的源代码时,它显示了这个。

curl --request POST \
  --url URL \
  --header 'Authorization: bearer XXX' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --cookie JSESSIONID=XXX \
  --form datasetFile=@FOLDER/producthierarchyl1-1.zip

{"message":"Bad Request","logref":null,"path":null,"_embedded":{"errors":[{"message":"Required argument [Publisher datasetFile] not specified","logref":null,"path":"/datasetFile","_embedded":{},"_links":{}}]},"_links":{"self":{"href":"/data-api/public-api/v4/datasets/ingestion/","templated":false,"profile":null,"deprecation":null,"title":null,"hreflang":null,"type":null,"name":null}}}

失眠的输出是这样的。

> POST PATH HTTP/2
> Host: URL
> user-agent: insomnia/2022.3.0
> cookie: JSESSIONID=XXX
> authorization: bearer XXX
> content-type: multipart/form-data; boundary=X-INSOMNIA-BOUNDARY
> accept: */*
> content-length: 407

* STATE: DO => DID handle 0x170404b14008; line 2077 (connection #27)
* multi changed, check CONNECT_PEND queue!
* STATE: DID => PERFORMING handle 0x170404b14008; line 2196 (connection #27)

| --X-INSOMNIA-BOUNDARY
| Content-Disposition: form-data; name="datasetFile"; filename="producthierarchyl1-1.zip"
| Content-Type: application/zip
| PK�QU�}�%+producthierarchyl1-1.csvUT  բ�b
| --X-INSOMNIA-BOUNDARY--

* We are completely uploaded and fine
* HTTP/2 found, allow multiplexing

哪里有猫腻?

  • 谢谢-谢谢
ldxq2e6h

ldxq2e6h1#

删除--header 'content-type: multipart/form-data; boundary=---011000010111000001101001选项。
它确实不应该这样使用:curl自己管理头和边界,因此只有在您真正 * 希望 * 和 * 需要 * 摆弄它罕见情况下才应该修改它。
更次要的第二件事:应该从命令行中删除--request POST,因为它是多余的,如果以后添加--location,很容易导致问题。

已更新

据说这个缺陷在后来版本的《失眠》中得到了修正

xpszyzbs

xpszyzbs2#

对于任何再次遇到这个问题的人,this answer正确地解释了问题的原因。
幸运的是,这应该只能在2022.3.0版本和更旧版本的Insomnia中重现。
如果您使用最新的2022.5.1,则生成的curl将不再有此问题,生成的多部分请求的示例:

curl --request GET \
  --url http://mockbin.org/request/anything \
  --header 'Content-Type: multipart/form-data' \
  --form test=test \
  --form test=@/Users/yourUserName/Desktop/somefile.txt

相关问题