2
從Boost docs,您可以通過iostream的發送GET很容易:如何用boost :: asio :: ip :: tcp :: iostream發送POST?
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();
當我修改上面的連接到我的IIS服務器,它工作正常。當我嘗試向我的服務器發送POST時,問題就出現了。然後,我收到錯誤消息「HTTP Error 400.請求動詞無效。」
各種在線討論似乎是問題與標題中的分隔符字符,但刪除所有問號,什麼都不固定。
有什麼,我在這裏失蹤? This forum discussion使它看起來像使用iostream發佈應該是可行的。谷歌並沒有太大的用處,因爲郵報在線是一個超載的詞。
編輯 - 這是我的POST的一個例子。使用GET時,服務器會將其提取出來,處理程序會抱怨它需要POST(因爲它應該)。
boost::asio::ip::tcp::iostream stream;
stream.connect("myurl.com", "http");
stream << "POST /.api/api.svc/objects/723aa707-4978-4062-bcc6-67b05783c4ec/comments/add\r\n";
stream << "Host: myurl.com\r\n";
stream << "Accept: */*\r\n";
stream << "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n";
stream << "Content-Length: 51\r\n";
stream << "Connection: close\r\n\r\n";
stream << "message=%3Cp%3EHello%3C%2Fp%3E";
stream.flush();
std::cout << stream.rdbuf();
你的'POST'代碼是什麼樣的? – ecatmur
我用一個例子編輯了這個問題。 –
我注意到的一件事是,在POST行末尾不包含請求的HTTP版本。 – Omaha