純粋なソケットを使用してpost-requestをC++で送信する必要があります。ここで間違っている可能性が何ソケットによるPOST要求
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
:私が持っている身体を送った後
int *binary = new int[bufferLength];
...
std::stringstream out(data);
out << "POST /push1_pub?id=game HTTP/1.1\n";
out << "Host: http://0.0.0.0:80\n";
out << "Content-Length: ";
out << bufferLength*sizeof(int);
out << "\r\n\r\n";
out << binary;
if (socket.send(data.c_str(), data.size()) == -1)
{
std::cout << "Failed to send headers\n";
}
else
{
// Send request body
socket.send(reinterpret_cast<char*>(binary), bufferLength*sizeof(int));
// Get the answer of server
char buf[1024];
std::cout << socket.recv(buf, 1024) << std::endl;
std::cout << buf << std::endl;
}
しかしbuf
中:私はどこリクエストのボディを送信するために理解できないのですか?
UPD:私が原因あなたのコメントに書かれている
新しいヘッダ:
std::string data;
std::stringstream out(data);
out << "POST /push1_pub?id=game\r\n";
out << "Host: http://localhost\r\n";
out << "Content-Length: ";
out << bufferLength << "\r\n";
out << "\r\n\r\n";
out << binary;
はまだ同じ問題を抱えています。
このコマンドで
UPD2
:curl -s -v -X POST 'http://0.0.0.0/push1_pub?id=game' -d 'Test'
すべてが正常に動作し、POSTリクエストが生成され、右送信されます。
あなたはフィドラーで何を見ますか? – SLaks
@SLaks私はLinuxで動かすことができませんか? – Ockonal
実際の問題ではありませんが、CRだけでなく、[CRLF](http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.1)で各ヘッダーを終了する必要があります。また、[チャンクエンコーディング](http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6.1)をサポートしない限り、 'HTTP/1.1'を指定しないでください。 (そのセクションの最後に* MUST *の行があることに注意してください) –