還有這一篇 有詳細的 example 和 server response 的解釋。
這一篇 有說,如何用 curl 下 PUT request
使用 Boost asio 來發。這篇 的回答有比較詳細的(但是是 POST request),可以參考。
這一個 pdf 中也有 tcp stream 的寫法:
tcp::iostream s("www.boost.org", "http"); s.expires_from_now(std::chrono::seconds(60)); s << "GET / HTTP/1.0\r0.2cm\n"; s << "Host: www.boost.org\r\n"; s << "Accept: */*\r\n"; s << "Connection: close\r\n\r\n";And then receive and process the response:
std::string header; while (std::getline(s, header) && header != "\r") std::cout << header << "\n"; std::cout << s.rdbuf();If at any time there is an error, the tcp::iostream class’s error() member function may be used to determine the reason for failure:
if (!s) { std::cout << "Socket error: " << s.error().message() << "\n"; return 1; }
所以用 boost::asio 來寫一個 PUT request: boostasio.cpp
#include <boost/asio.hpp> int main() { boost::asio::ip::tcp::iostream s("127.0.0.1","8123"); s << "PUT /customers/23 HTTP/1.1\n"; s << "Host: 127.0.0.1\r\n"; s << "Content-length: 0\r\n"; s << "\r\n"; // s << std::flush; }build command:
g++ boostasio.cpp -lboost_system -lpthread
配合 json 作為 PUT 的 body 要參考這裡:
PUT /echo/put/json HTTP/1.1 Accept: application/json Content-Type: application/json Content-Length: 85 Host: reqbin.com { "Id": 12345, "Customer": "John Smith", "Quantity": 1, "Price": 10.00 }
如果要看 server 的 reponse,這一篇 有簡單的 example,
就是..
ip::tcp::iostream stream; stream.expires_from_now(boost::posix_time::seconds(60)); stream.connect("www.boost.org", "http"); stream << "GET /LICENSE_1_0.txt HTTP/1.0\r\n"; stream << "Host: www.boost.org\r\n"; stream << "Accept: */*\r\n"; stream << "Connection: close\r\n\r\n"; stream.flush(); std::cout << stream.rdbuf();
沒有留言:
張貼留言