Câu hỏi Cú pháp dòng lệnh cURL để thực hiện một yêu cầu POST là gì?


Làm thế nào tôi có thể làm một BÀI ĐĂNG yêu cầu với cURL công cụ dòng lệnh?


2056
2017-09-17 15:39


gốc




Các câu trả lời:


Với các trường:

curl --data "param1=value1&param2=value2" https://example.com/resource.cgi

Với các trường được chỉ định riêng lẻ:

curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi

Multipart:

curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi

Multipart với các trường và tên tệp:

curl --form "fileupload=@my-file.txt;filename=desired-filename.txt" --form param1=value1 --form param2=value2 https://example.com/resource.cgi

Không có dữ liệu:

curl --data '' https://example.com/resource.cgi

curl -X POST https://example.com/resource.cgi

curl --request POST https://example.com/resource.cgi

Để biết thêm thông tin, xem hướng dẫn sử dụng cURL. Các cURL hướng dẫn cách mô phỏng trình duyệt web là hữu ích.

Với libcurl, hãy sử dụng curl_formadd() để xây dựng biểu mẫu của bạn trước khi gửi biểu mẫu theo cách thông thường. Xem tài liệu libcurl để biết thêm thông tin.

Đối với các tệp lớn, hãy xem xét thêm thông số để hiển thị tiến độ tải lên:

curl --tr-encoding -X POST -v -# -o output -T filename.dat \
  http://example.com/resource.cgi

Các -o output là bắt buộc, nếu không thì thanh tiến trình sẽ không xuất hiện.


2389
2017-09-17 15:43



@LauriRanta --data-urlencode (không có dấu gạch ngang), trong các phiên bản gần đây ít nhất - waitinforatrain
Cũng hoạt động nếu bạn cần cập nhật tài nguyên với PUT: curl -X PUT ... - Subfuzion
Tôi không hiểu ... khi nào tôi sẽ làm With Fields, khi nào với Multipart và khi Without Data? - CodyBugstein
Thay vì --data bạn có thể dùng -d. - user35538
tôi có một mảng các trường. tôi có thể làm cái này như thế nào? - ARUNBALAN NV


Đối với một POST HTTP RESTful chứa XML:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:text/xml"

hoặc cho JSON, hãy sử dụng nó:

curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"

Thao tác này sẽ đọc nội dung của tệp có tên filename.txt và gửi nó như là yêu cầu bài viết.


481
2018-03-10 08:29



@ tom-wijsman giải thích: curl -X POST ngụ ý một yêu cầu HTTP POST, -d tham số (phiên bản dài: --data) cho biết rằng những gì sau sẽ là các tham số POST và @filename chỉ định nội dung của tệp filename làm tham số. Cách tiếp cận này hoạt động tốt nhất với các API RESTful HTTP như được tìm thấy tại Twitter, Facebook, các dịch vụ web khác bao gồm Ruby on Rails cũng như các API HTTP của các cơ sở dữ liệu như CouchDB. REST là viết tắt của Chuyển trạng thai biểu hiện - soundmonster
Làm thế nào chúng ta có thể thấy xml phản hồi không phải trong một dòng nhưng được định dạng? - Vitaly Zdanevich
Tôi nghĩ rằng bạn có thể rời khỏi -X POST kể từ đó được ngụ ý bởi -d. - benjifisher
Làm thế nào để cung cấp cho nhiều tiêu đề? - keya
Nhiều tiêu đề: curl -H "header2: 1" -H "header2: 2" ... - Tomáš Kratochvíla


Dữ liệu từ stdin: sử dụng -d @-. Thí dụ:

echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown

Đầu ra:

<p>Hello <strong>world</strong>!</p>

120
2018-03-25 19:35



Tuyệt vời nếu bạn có một đối tượng JSON đã có trong clipboard - Luca Steeb
thậm chí còn tốt hơn: echo "$ message" | curl -H "Loại Nội dung: ứng dụng / json" -d @ - "$ url" - rzr


curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi 

là ví dụ được tìm thấy trong Curl Example Manual.

Sử dụng% 26 cho ký hiệu và nếu mặc định ở trên không hoạt động:

curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi 

65
2017-09-17 15:42





Nếu bạn muốn đăng nhập vào một trang web, hãy làm như sau:

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login
curl -L -b headers http://localhost/

Yêu cầu đầu tiên lưu cookie phiên (được cung cấp khi đăng nhập thành công) trong tệp "tiêu đề". Từ bây giờ, bạn có thể sử dụng cookie đó để xác thực bạn với bất kỳ phần nào của trang web mà bạn thường truy cập sau khi đăng nhập bằng trình duyệt.


58
2018-03-04 02:21



một lưu ý từ trang man curl: 'Tuy nhiên, tùy chọn -c, -cookie-jar là cách tốt hơn để lưu trữ cookie.' - maxschlepzig


curl -v --data-ascii var=value http://example.com

và có nhiều tùy chọn hơn, hãy kiểm tra curl --help để biết thêm thông tin.


32
2017-09-17 15:43





Nếu bạn lười biếng, bạn có thể làm cho google-chrome làm tất cả công việc cho bạn.

  1. Nhấp chuột phải vào biểu mẫu bạn muốn gửi và chọn Thanh tra. Thao tác này sẽ mở bảng điều khiển DevTools.
  2. Chọn Mạng lưới trong devtools và đánh dấu vào Bảo tồn nhật ký hộp kiểm.
  3. Gửi biểu mẫu và định vị mục nhập bằng phương thức POST (nhấp chuột phải vào bất kỳ tiêu đề cột nào và đảm bảo phương pháp được chọn).
  4. Nhấp chuột phải vào dòng có POST và chọn Sao chép > Sao chép dưới dạng cURL.

chrome devtools: copy as cURL

Chrome sẽ sao chép tất cả dữ liệu yêu cầu trong cú pháp cURL.

Chrome sử dụng --data 'param1=hello&param2=world' mà bạn có thể dễ đọc hơn bằng cách sử dụng một -d hoặc là -F mỗi thông số tùy thuộc vào loại yêu cầu POST bạn muốn gửi, có thể là application/x-www-form-urlencoded hoặc là multipart/form-data cho phù hợp.

Đây sẽ là POST-ed application/x-www-form-urlencoded (được sử dụng cho phần lớn các biểu mẫu không chứa tệp tải lên):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -d param1=hello \
    -d name=dinsdale

Cho một multipart/form-data POST sử dụng -F (thường được sử dụng với các biểu mẫu chứa tải lên tệp hoặc thứ tự của các trường quan trọng hoặc nhiều trường có cùng tên là bắt buộc):

curl http://httpbin.org/post \
    -H "User-Agent: Mozilla/2.2" \
    -F param1=hello \
    -F name=dinsdale \
    -F name=piranha

Các User-Agent tiêu đề thường không cần thiết, nhưng tôi đã ném nó chỉ trong trường hợp. Bạn có thể tránh phải đặt tác nhân người dùng trên mọi yêu cầu bằng cách tạo ~/.curlrc tệp có chứa e.g. User-Agent: "Mozilla/2.2"


17
2017-09-29 08:06