Gửi yêu cầu POST với dữ liệu được chỉ định trong tệp qua Curl


239

Tôi cần phải thực hiện một yêu cầu POST thông qua Curl từ dòng lệnh. Dữ liệu cho yêu cầu này nằm trong một tập tin. Tôi biết rằng thông qua PUT điều này có thể được thực hiện với --upload-filetùy chọn.

curl host:port/post-file -H "Content-Type: text/xml" --data "contents_of_file"


1
Xin lỗi có lẽ tôi đã mô tả nhầm vấn đề của mình, tôi cần gửi yêu cầu không qua php-curl mà chỉ thông qua lệnh curl từ dòng lệnh từ hệ điều hành linux.
sinh sản vào

Câu trả lời:


359

Bạn đang tìm kiếm --data-binaryđối số:

curl -i -X POST host:port/post-file \
  -H "Content-Type: text/xml" \
  --data-binary "@path/to/file"

Trong ví dụ trên, -iin ra tất cả các tiêu đề để bạn có thể thấy những gì đang diễn ra và -X POSTlàm rõ rằng đây là một bài đăng. Cả hai điều này có thể được bỏ qua một cách an toàn mà không thay đổi hành vi trên dây. Đường dẫn đến tệp cần được đi trước bởi một @ký hiệu, vì vậy hãy curlbiết đọc từ tệp.


@ trong trường hợp này sẽ là.xml
dennismonsewicz

52
các @phần cực kỳ quan trọng!
Ron Klein

Vì vậy, chúng tôi sử dụng tham số --data-binary, nhưng nội dung tệp thực tế có thể là văn bản? Vì XML thường không phải là nhị phân.
David

8
thực sự bạn có thể sử dụng cờ chỉ -d
Anatoly Yakimchuk

16
@ Tol182 -dsẽ gây ra các curldòng mới, nhưng --data-binarysẽ không.
Acumenus

43

Tôi cần phải thực hiện một yêu cầu POST thông qua Curl từ dòng lệnh. Dữ liệu cho yêu cầu này nằm trong một tệp ...

Tất cả những gì bạn cần làm là --databắt đầu đối số bằng @:

curl -H "Content-Type: text/xml" --data "@path_of_file" host:port/post-file-path

Ví dụ: nếu bạn có dữ liệu trong một tệp được gọi stuff.xmlthì bạn sẽ làm một cái gì đó như:

curl -H "Content-Type: text/xml" --data "@stuff.xml" host:port/post-file-path

Các stuff.xmltên tập tin có thể được thay thế bằng một đường dẫn tương đối hoặc đầy đủ đến tập tin: @../xml/stuff.xml, @/var/tmp/stuff.xml, ...


2
Trong trường hợp bạn cần gửi một trường có tên, bạn cũng có thể sử dụng --data "name@stuff".
Hermann

15

Nếu bạn đang sử dụng dữ liệu biểu mẫu để tải lên tệp, trong đó phải chỉ định tên tham số, bạn có thể sử dụng:

curl -X POST -i -F "parametername=@filename" -F "additional_parm=param2" host:port/xxx


Cảm ơn bạn! Giải pháp 1. không hiệu quả với tôi. parametername=thực sự đã giúp tôi :)
Cyborg

3

Hầu hết các câu trả lời đều hoàn hảo ở đây, nhưng khi tôi gặp vấn đề cụ thể ở đây, tôi phải tải lên tệp nhị phân (bảng tính XLSX) bằng phương thức POST, tôi thấy một điều còn thiếu , thường là nó không chỉ là tệp bạn tải, bạn có thể có nhiều yếu tố dữ liệu hình thức , như bình luận cho tập tin hoặc thẻ để tập tin vv như trường hợp của tôi. Do đó, tôi muốn thêm nó vào đây vì đây là trường hợp sử dụng của tôi, để nó có thể giúp đỡ người khác.

curl -POST -F comment=mycomment -F file_type=XLSX -F file_data=@/your/path/to/file.XLSX http://yourhost.example.com/api/example_url

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.