如何使用boost::asio::ip::tcp::iostream发送POST ?
How do I send a POST with boost::asio::ip::tcp::iostream?
从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
相关文章:
- 从命令行c++发送文本文件名
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 发送一个带有libcurl C++问题的帖子请求:s
- 需要从 istream 和 ostream 派生 iostream
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C++中将函数发送到另一个进程
- boost xml parsingl将xml的路径作为变量发送
- 如何将数组从Objective-C发送到C++函数
- std::带有自定义缓冲区的 iostream 不允许我写入
- 如何使用ESP8266向谷歌主页发送命令
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 为什么默认复制函数在按值发送参数时不调用?
- 程序不断发送垃圾邮件号码?
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 如何使用 Google Test 向测试添加元数据 / 如何将数据从 Google Test 发送到 TestEven
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- Qt:如何使不兼容的发送方/接收方参数兼容?
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- 如何将格式字符串发送到iostream
- 如何使用boost::asio::ip::tcp::iostream发送POST ?