cUrl: รายการอาร์กิวเมนต์ยาวเกินไป


15

ฉันได้รับข้อผิดพลาด: Argument list too longเมื่อพยายามใช้ cUrl เพื่อส่งไฟล์ใน base64 ภายในเนื้อความของ JSON ของฉัน

ฉันกำลังใช้สิ่งนี้:

DATA=$( base64 "$FILE" )

curl -X POST -H "Content-Type: application/json" -d '{
   "data": "'"$DATA"'"
}' $HOST

มีวิธีอื่นในการรับ DATA ในเนื้อหาของ JSON ของฉันหรือไม่

คำนึงถึงว่าฉันต้องอ่านไฟล์ในระบบไฟล์ของฉันแปลงเป็น base64 แล้วส่งมันเข้าไปในร่างกาย


อาจเกี่ยวข้อง: stackoverflow.com/questions/19003855/…
fredtantini

คำตอบ:


19

หากไฟล์ที่เข้ารหัส base64 มีขนาดใหญ่เกินไปที่จะใส่ลงในรายการอาร์กิวเมนต์คุณจะต้องผ่านไฟล์นั้น หนึ่งในวิธีที่ง่ายกว่าที่ฉันคิดได้คือการส่งผ่านอินพุตมาตรฐาน จากหน้าcurl manคุณสามารถใช้-d @-อ่านจาก stdin แทนบรรทัดคำสั่ง

curl -X POST -H "Content-Type: application/json" -d @- "$HOST" <<CURL_DATA
{ "data": "$DATA" }
CURL_DATA

คุณยังสามารถใช้เวอร์ชันนี้ได้ฉันชอบมากกว่านี้:echo { "data": "$DATA" } | curl -X POST -H "Content-Type: application/json" -d @- "$HOST"
morhook
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.