Chương trình C++ của tôi hiện đang gọi curl qua một đường ống (popen("curl ...")
) để POST một tệp dữ liệu JSON đến một máy chủ web. Điều này có những hạn chế về hiệu suất rõ ràng do cần phải lưu JSON vào một tệp và gọi curl trong một subshell. Tôi muốn viết lại nó để sử dụng libcurl, nhưng nó không phải là rõ ràng với tôi làm thế nào để làm điều này. Các dòng lệnh tôi vượt qua để popen()
là:Làm cách nào để POST một bộ đệm của JSON bằng cách sử dụng libcurl?
curl -s -S -D /dev/null -H "Content-Type: application/json" -X POST -d file-of-json http://server/handler.php
Các dữ liệu JSON (khoảng 3K) đang ngồi trong một bộ đệm trong bộ nhớ RAM trước khi tôi cần phải đăng nó. Tôi đã mong đợi sử dụng CURLOPT_READFUNCTION của libcurl để đệm bộ đệm vào libcurl (nhưng tôi mở để lựa chọn thay thế), và CURLOPT_WRITEFUNCTION để nắm bắt trả lời của máy chủ, tương tự như cách tôi đọc trả lời từ đường ống của popen.
Tất cả điều đó có vẻ đơn giản. Điều gì là khó hiểu là sự kết hợp của CURLOPT_POST, CURLOPT_HTTPPOST, CURLOPT_POSTFIELDS, CURLOPT_HTTPHEADER tôi cần. Tôi đã đọc nhiều bài viết về chủ đề này (không có ý định chơi chữ), và không có bài viết nào khớp chính xác với kịch bản của tôi. Bất kỳ đề xuất?
[Lưu ý rằng tôi thường không có bất kỳ biểu mẫu form URL mã hóa, như thế này: http: //server/handler.php I = làm & không = sử dụng & những = trong & tôi = truy vấn?]
Điều này là hoàn hảo. Cảm ơn. –
Không phải lo lắng. BTW, nếu bạn đang viết C++ bạn nên kiểm tra curlpp, đó là một wrapper cho thẳng C libcurl, và là một cách tốt đẹp hơn nhiều về việc: http://curlpp.org/index.php/examples/71- example-21 –