Chỉ có thể làm điều này với wget. Ít nhất là với phiên bản 1.13.4 và có thể những người khác. Tùy chọn --post-file cho phép bạn chỉ định một tệp để gửi, miễn là tệp postdata được xây dựng đúng.
Tôi cũng đã thử nghiệm điều này với các tệp nhị phân và nó hoạt động như mong đợi. Bạn KHÔNG cần mã hóa base64 tệp, nhưng bạn cần đảm bảo tệp của bạn không chứa ranh giới.
Lệnh tối thiểu cần thiết để thực hiện công việc này sẽ là:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
và tệp postdata sẽ cần chứa một cái gì đó như:
--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--
Một số chi tiết rất quan trọng ở đây:
- Các dòng trong tệp dữ liệu bài đăng được kết thúc bằng \ r \ n. Ngoại lệ duy nhất là dữ liệu bên trong bối cảnh tập tin.
- Mỗi thuộc tính BOUNDary trong postdata phải khớp với giá trị BOUNDary trong lệnh gọi wget. (Ví dụ về FILEUPLOAD)
- Tất cả các ranh giới được bắt đầu bằng hai dấu gạch nối "-" và kết thúc bằng \ r \ n
- Ranh giới cuối cùng được thêm hai dấu gạch nối "-" và kết thúc bằng \ r \ n
- Mỗi phần dữ liệu, nội dung tệp hoặc giá trị tham số, được bao quanh bởi một dòng trống "\ r \ n"
Tôi nghĩ rằng điều này có thể giúp ai đó vì một số môi trường được kiểm soát có wget nhưng không cong.
cat pic.jpg >> postdata
, được tải trong Notepad ++ và nối thêm ranh giới cuối + '-' + EOL. Tham khảo W3C