Câu trả lời:
Với các trường:
curl --data "param1=value1¶m2=value2" https://example.com/resource.cgi
Với các trường được chỉ định riêng:
curl --data "param1=value1" --data "param2=value2" https://example.com/resource.cgi
Đa mục:
curl --form "fileupload=@my-file.txt" https://example.com/resource.cgi
Đa mục 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 của CURL . Các cURL hướng dẫn về thi đua một trình duyệt web là hữu ích.
Với libcurl, sử dụng curl_formadd()
chức năng để xây dựng biểu mẫu của bạn trước khi gửi nó 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 tham số để hiển thị tiến trình tải lên:
curl --tr-encoding -X POST -v -# -o output -T filename.dat \
http://example.com/resource.cgi
Các -o output
yêu cầu, nếu không không có thanh tiến trình sẽ xuất hiện.
--data-urlencode
(không có dấu gạch ngang), trong các phiên bản gần đây ít nhất
With Fields
, khi nào Multipart
và khi Without Data
nào?
--data
bạn có thể sử dụng -d
.
Đối với 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, sử dụng cái này:
curl -X POST -d @filename.txt http://example.com/path/to/resource --header "Content-Type:application/json"
Điều này sẽ đọc nội dung của tệp có tên filename.txt
và gửi nó dưới dạng yêu cầu bài viết.
curl -X POST
ngụ ý một yêu cầu POST HTTP, -d
tham số (phiên bản dài --data
:) cho curl rằng những gì tiếp theo sẽ là 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 API HTTP RESTful như được tìm thấy tại Twitter, Facebook, nhiều dịch vụ web khác bao gồm Ruby on Rails cũng như API HTTP của cơ sở dữ liệu như CouchDB. REST là viết tắt của chuyển trạng thái Đại diện
-X POST
vì điều đó được ngụ ý bởi -d
.
Dữ liệu từ stdin với -d @-
Thí dụ:
echo '{"text": "Hello **world**!"}' | curl -d @- https://api.github.com/markdown
Đầu ra:
<p>Hello <strong>world</strong>!</p>
curl -d "name=Rafael%20Sagula&phone=3320780" http://www.where.com/guest.cgi
là ví dụ được tìm thấy trong Hướng dẫn ví dụ Curl .
Sử dụng% 26 cho ký hiệu thay thế nếu cách trên không hoạt động:
curl -d "name=Rafael%20Sagula%26phone=3320780" http://www.where.com/guest.cgi
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ừ 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.
curl -v --data-ascii var=value http://example.com
và có nhiều lựa chọn hơn, kiểm tra curl --help
để biết thêm thông tin.
Nếu bạn lười biếng, bạn có thể lấy google-chrome để làm tất cả công việc cho bạn.
Chrome sẽ sao chép tất cả dữ liệu yêu cầu theo cú pháp cURL.
Chrome sử dụng --data 'param1=hello¶m2=world'
mà bạn có thể dễ đọc hơn bằng cách sử dụng một -d
hoặc -F
một tham số tùy thuộc vào loại yêu cầu POST bạn muốn gửi, có thể là một trong hai application/x-www-form-urlencoded
hoặc multipart/form-data
theo đó.
Đây sẽ là POST-ed dưới dạng 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
Đối với multipart/form-data
việc sử dụng POST -F
( thường được sử dụng với các biểu mẫu có chứa tệp tải lên hoặc trong đó thứ tự các trường là quan trọng hoặc trong đó yêu cầu nhiều trường có cùng tên ):
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 đề không bình thường cần thiết, nhưng tôi đã ném nó trong chỉ trong trường hợp. Bạn có thể tránh phải đặt tác nhân người dùng theo mọi yêu cầu bằng cách tạo ~/.curlrc
tệp chứa vdUser-Agent: "Mozilla/2.2"
curl -d "param1=value1¶m2=value2" -X POST http://localhost:3000/data