我需要重寫從瀏覽器中提取的這個 curl 請求以從 bash 中執行它,它是一個多部分/表單資料,它在同一個請求中結合了影像的上傳和 json,我已經進行了幾個測驗來代替原始兩個 -F 的資料,但服務器回應錯誤。正確的方法是什么?我也無法理解 WebKitFormBoundary 旁邊的鍵是一個看似隨機的值,它只是一個分隔符嗎?我可以用什么嗎?
我洗掉了我認為不相關的標題
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' \
謝謝
uj5u.com熱心網友回復:
我也無法理解 WebKitFormBoundary 旁邊的鍵是一個看似隨機的值,它只是一個分隔符嗎?我可以用什么嗎?
是的,是的,實際上是的。它應該是一個隨機保證唯一的字串,用作分隔符來表示表單的開始和結束。如果您事先知道您的上傳內容都不包含該字串stackoverflow,您可以使用Content-Type: multipart/form-data; boundary=stackoverflow例如(但如果您上傳一個可能會中斷檔案實際上包含字串stackoverflow!),但是您應該讓 curl 自動生成該字串,而不是自己指定它,curl 將自動生成一個實際上保證是唯一的字串。
我洗掉了我認為不相關的標題
...如果您猜錯了,服務器可能會因缺少必需的標頭而給您一個錯誤。假設您在洗掉時沒有犯任何錯誤irrelevant headers,我認為這是
curl 'https://localhost'\
--form "[email protected];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 的默認接受標頭,因此無需指定它,并且 curl 自動生成邊界------------------------7d0262831ce8f248,因此也無需手動指定邊界。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448105.html
上一篇:谷歌改變網站圖示服務
