如何使用boost::asio::ip::tcp::iostream发送POST ?

How do I send a POST with boost::asio::ip::tcp::iostream?

本文关键字:发送 iostream POST tcp ip 何使用 boost asio      更新时间:2023-10-16

从Boost文档中,您可以很容易地通过iostream发送GET:

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.0rn";
stream << "Host: www.boost.orgrn";
stream << "Accept: */*rn";
stream << "Connection: closernrn";
stream.flush();
std::cout << stream.rdbuf();

当我修改上面的连接到我的IIS服务器,它工作正常。当我尝试向服务器发送POST时,问题就出现了。然后我得到错误消息"HTTP错误400。请求谓词无效。"

各种在线讨论似乎问题出在标题中的分隔符,但删除所有问号没有解决任何问题。

我在这里错过了什么吗?这个论坛的讨论使它看起来像张贴与iostream应该是可行的。自从"post"这个词在网络上被过度使用以来,谷歌就没有多大用处了。

编辑-这是我的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/addrn";
stream << "Host: myurl.comrn";
stream << "Accept: */*rn";
stream << "Content-Type: application/x-www-form-urlencoded; charset=utf-8rn";
stream << "Content-Length: 51rn";
stream << "Connection: closernrn";
stream << "message=%3Cp%3EHello%3C%2Fp%3E";
stream.flush();
std::cout << stream.rdbuf();

@Omaha发现,POST请求无效。POST行应该像这样:

stream << "POST /.api/api.svc/objects/723aa707-4978-4062-bcc6-67b05783c4ec/comments/add  HTTP/1.0rn"

必须是有效的HTTP请求。参见HTTP/1.1: Request