gpt4 book ai didi

c++ - 带套接字的 POST 请求

转载 作者:行者123 更新时间:2023-11-28 03:38:27 25 4
gpt4 key购买 nike

我必须在 C++ 中使用纯套接字发送后请求。我无法理解将请求正文发送到哪里:

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 发送正文后我有:

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

这里可能出了什么问题?


更新:

由于您的评论,我写了新标题:

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' 一切正常并生成发布请求并正确发送。

最佳答案

您的主机线路错误。它应该是一个简单的主机名,例如“localhost”或“example.com”,而不是您现在获得的 http://0.0.0.0:80 URL。

网络服务器使用主机行来识别正在请求托管在单个 IP 上的潜在数千个站点中的哪些站点。端口号也没有用,因为在您发送 HTTP header 时,TCP 连接已经建立。由于您已经在执行 HTTP 请求,因此无需重复指定正在使用的协议(protocol)。

关于c++ - 带套接字的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10159472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com