在同一请求中调整 multipart/form-data 请求以使用图像和 json 进行卷曲
Adapt multipart/form-data request to curl with image and json in the same request
我需要重写这个从浏览器中提取的 curl 请求以从 bash 执行它,它是一个 multipart/form-data 将图像的上传与 json 结合在一起同样的请求,我已经进行了几次测试,用两个 -F 替换原始数据,但服务器响应错误。
正确的方法是什么?
我也无法理解 WebKitFormBoundary 旁边的键是一个看起来随机的值,它只是一个分隔符吗?我可以使用任何东西吗?
我删除了我认为不相关的headers
curl 'https://localhost' \
-H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXXXXXXXXXXXXXXXX'
-H 'Accept: */*' \
--data-raw $'------WebKitFormBoundaryXXXXXXXXXXXXXXXX\r\nContent-Disposition: form-data; name="image"; filename="image.jpg"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundaryXXXXXXXXXXXXXXXX\r\nContent-Disposition: form-data; name="item"; filename="blob"\r\nContent-Type: application/json\r\n\r\n{"item1":"xxxx","item2":"yyyy"}\r\n------WebKitFormBoundaryXXXXXXXXXXXXXXXX--\r\n' \
谢谢
I also fail to understand the key that is next to WebKitFormBoundary is a value that seems random, is it just a separator? can i use anything?
是的,是的,实际上是的。它应该是一个 random-guaranteed-unique 字符串,用作分隔符来表示表格的开始和结束。如果您事先知道 none 的上传内容包含字符串 Whosebug
,您可以使用 Content-Type: multipart/form-data; boundary=Whosebug
例如(但如果你上传的文件实际上包含字符串 Whosebug
,这可能会中断!),但你应该让 curl 自动生成该字符串,而不是你自己指定它,curl 将 auto-generate一个几乎保证唯一的字符串。
I have removed the headers that I considered irrelevant
... 如果您猜错了,服务器可能会报错,因为您错过了必需的 header。假设您在删除 irrelevant headers
时没有犯任何错误,但我认为它是
curl 'https://localhost'\
--form "image=@image.jpg;type=image/jpeg"\
--form "item=@blob;type=application/json"
该命令生成的请求是错误的:
POST / HTTP/1.1
Host: localhost
User-Agent: curl/7.81.0
Accept: */*
Content-Length: 359
Content-Type: multipart/form-data; boundary=------------------------7d0262831ce8f248
--------------------------7d0262831ce8f248
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
image.jpg content
--------------------------7d0262831ce8f248
Content-Disposition: form-data; name="item"; filename="blob"
Content-Type: application/json
["json lol"]
--------------------------7d0262831ce8f248--
上面可以看到,反正Accept: */*
是curl默认的accept-header,所以不用指定,curl auto-generated边界------------------------7d0262831ce8f248
所以也不需要手动指定边界。
我需要重写这个从浏览器中提取的 curl 请求以从 bash 执行它,它是一个 multipart/form-data 将图像的上传与 json 结合在一起同样的请求,我已经进行了几次测试,用两个 -F 替换原始数据,但服务器响应错误。 正确的方法是什么? 我也无法理解 WebKitFormBoundary 旁边的键是一个看起来随机的值,它只是一个分隔符吗?我可以使用任何东西吗?
我删除了我认为不相关的headers
curl 'https://localhost' \
-H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXXXXXXXXXXXXXXXX'
-H 'Accept: */*' \
--data-raw $'------WebKitFormBoundaryXXXXXXXXXXXXXXXX\r\nContent-Disposition: form-data; name="image"; filename="image.jpg"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundaryXXXXXXXXXXXXXXXX\r\nContent-Disposition: form-data; name="item"; filename="blob"\r\nContent-Type: application/json\r\n\r\n{"item1":"xxxx","item2":"yyyy"}\r\n------WebKitFormBoundaryXXXXXXXXXXXXXXXX--\r\n' \
谢谢
I also fail to understand the key that is next to WebKitFormBoundary is a value that seems random, is it just a separator? can i use anything?
是的,是的,实际上是的。它应该是一个 random-guaranteed-unique 字符串,用作分隔符来表示表格的开始和结束。如果您事先知道 none 的上传内容包含字符串 Whosebug
,您可以使用 Content-Type: multipart/form-data; boundary=Whosebug
例如(但如果你上传的文件实际上包含字符串 Whosebug
,这可能会中断!),但你应该让 curl 自动生成该字符串,而不是你自己指定它,curl 将 auto-generate一个几乎保证唯一的字符串。
I have removed the headers that I considered irrelevant
... 如果您猜错了,服务器可能会报错,因为您错过了必需的 header。假设您在删除 irrelevant headers
时没有犯任何错误,但我认为它是
curl 'https://localhost'\
--form "image=@image.jpg;type=image/jpeg"\
--form "item=@blob;type=application/json"
该命令生成的请求是错误的:
POST / HTTP/1.1
Host: localhost
User-Agent: curl/7.81.0
Accept: */*
Content-Length: 359
Content-Type: multipart/form-data; boundary=------------------------7d0262831ce8f248
--------------------------7d0262831ce8f248
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
image.jpg content
--------------------------7d0262831ce8f248
Content-Disposition: form-data; name="item"; filename="blob"
Content-Type: application/json
["json lol"]
--------------------------7d0262831ce8f248--
上面可以看到,反正Accept: */*
是curl默认的accept-header,所以不用指定,curl auto-generated边界------------------------7d0262831ce8f248
所以也不需要手动指定边界。