it-swarm.asia

أداة سطر أوامر Linux لتنزيل الملفات عبر HTTP

أستطيع أن أرى أن wget يحتوي على خيار --post-file ، لكن الصفحة تقول "لا تدعم Wget حاليًا بيانات متعددة الأجزاء/البيانات لإرسال POST بيانات ؛ فقط التطبيق/x-www-form-urlencoded يجب تحديد واحد فقط من "-post-data" و "-post-file". "

هل هناك طريقة مماثلة لتحميل الملفات في بيانات متعددة الأجزاء/النماذج؟

23
kdt

استخدام حليقة:

curl -F "[email protected];filename=nameinpost" url.com
29
Tobu

من الممكن القيام بذلك باستخدام wget فقط. على الأقل مع الإصدار 1.13.4 وربما الآخرين. يتيح لك خيار --post-file تحديد ملف لإرساله ، طالما تم إنشاء ملف بيانات البيانات بشكل صحيح.

لقد اختبرت هذا أيضًا مع الملفات الثنائية ويعمل كما هو متوقع. لا تحتاج إلى base64 ترميز الملف ، ولكن عليك التأكد من أن الملف الخاص بك لا يحتوي على الحدود.

سيكون الحد الأدنى للأمر المطلوب لإنجاز هذا العمل هو:

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform

وسيحتاج ملف بيانات النشر إلى احتواء شيء مثل:

--FILEUPLOAD
Content-Disposition: form-data; name="comment"

I love uploading files!

--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin"; 
Content-Type: application/octet-stream
Media Type: application/octet-stream

Give me some automated file upload action!

--FILEUPLOAD--

هناك عدد من التفاصيل مهمة هنا:

  1. يتم إنهاء الأسطر في ملف بيانات المنشور بـ\r\n. الاستثناء الوحيد هو البيانات داخل سياق الملف.
  2. يجب أن تتطابق كل سمة BOUNDARY في بيانات النشر مع القيمة BOUNDARY في استدعاء wget. (FILEUPLOAD في المثال)
  3. جميع الحدود مسبوقة بواصلتين "-" وتنتهي بـ\r\n
  4. يتم إحاطة الحد الأخير بواصلتين إضافيتين "-" وينتهي بـ\r\n
  5. كل جزء من البيانات أو محتوى الملف أو قيمة المعلمة ، محاط بسطر فارغ "\ r\n"

اعتقدت أن هذا قد يساعد شخص ما لأن بعض البيئات التي تسيطر عليها لديها wget ولكن ليس حليقة.

16
tudor