HTTP를 통해 파일을 multipart / form-data로 업로드하기위한 Linux 명령 줄 도구? / 양식 데이터를

wget에 --post-file옵션이 있음을 알 수 있지만 맨 페이지에는

Wget은 현재 POST 데이터 전송을위한 다중 파트 / 양식 데이터를 지원하지 않습니다. application / x-www-form-urlencoded 만 해당됩니다. 단 하나 --post-data--post-file지정해야합니다.

multipart / form-data에 파일을 업로드하는 비슷한 방법이 있습니까?



답변

컬 사용 :

curl -F "file=@localfile;filename=nameinpost" url.com

답변

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 속성은 wget 호출의 BOUNDARY 값과 일치 해야합니다 . (이 예에서 FILEUPLOAD)
  3. 모든 경계는 두 개의 하이픈 “-“으로 시작하고 \ r \ n으로 끝납니다.
  4. 마지막 경계에는 두 개의 추가 하이픈 “-“이 붙고 \ r \ n으로 끝납니다.
  5. 각 데이터, 파일 내용 또는 매개 변수 값은 빈 줄 “\ r \ n”으로 둘러싸여 있습니다.

일부 통제 된 환경에는 문제가 없지만 말리지 않기 때문에 이것이 누군가를 도울 수 있다고 생각했습니다.