以下代码直到最近都能够在我的(未更改的)服务器上执行发布请求。几周以来,我收到了 400 错误请求响应。可能是什么问题?使用命令行curl 进行POST 发送效果很好。
std::ostringstream oss;
oss << "mydata";
int size = oss.tellp();
std::string test = oss.str();
boost::asio::ip::tcp::iostream stream;
stream.connect("myserver.nl", "http");
stream << "POST /dir/newdata.php HTTP/1.1\r\n";
stream << "Host: myserver.nl\r\n";
stream << "Accept: */*\r\n";
stream << "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n";
stream << "Content-Length: " << size << "\r\n";
stream << "Connection: close\r\n\r\n";
stream << oss.str();
stream.flush();
std::cout << stream.rdbuf();
现在会导致以下错误:
HTTP/1.1 400 Bad Request
Date: Tue, 20 Feb 2018 09:22:15 GMT
Server: Apache/2.4.29 (Unix)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br/>
</p>
查询和 HTTP 版本之间有一个额外的空格:
stream << "POST /dir/newdata.php HTTP/1.1\r\n";
感谢您的回复:我的问题出现在服务器版本中!我确认 donc que d'ancien server (Apache sous linux pour mon cas) était tolérant sur le nombre d'espaces...