用c++编写的HTTP POST请求

HTTP POST request with C++

本文关键字:HTTP POST 请求 c++      更新时间:2023-10-16

在你把这篇文章标记为重复之前:我已经尝试了所有的"解决方案",我可以在互联网和stackoverflow上找到,但没有任何工作,主要是因为一些函数被弃用,或者我缺少一些库或其他东西。

我得到了下面的代码在这里(第二个答案,因为我不能得到libcurl工作),但这对我不起作用,因为Visual Studio 2015告诉我使用GetAddrInfoW()而不是gethostbyname(),因为它已被弃用,所以我试图这样做,最终像这样:

WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
    return;
}

SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct hostent* host = new hostent();
GetAddrInfoW((PCWSTR)"www.google.com", (PCWSTR)"http", nullptr, (PADDRINFOW*)host);
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(80);
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)"192.168.xxx.xxx");
if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0)
{
    return;
}
send(Socket, "GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn", strlen("GET / HTTP/1.1rnHost: www.google.comrnConnection: closernrn"), 0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket, buffer, 10000, 0)) > 0)
{
    int i = 0;
    while (buffer[i] >= 32 || buffer[i] == 'n' || buffer[i] == 'r')
    {
        i += 1;
    }
}
closesocket(Socket);
WSACleanup();

因为空指针

也不能工作

(Visual Studio说:异常触发在0x00AE5F02在Project1.exe: 0xC0000005:访问违规读取在位置0x00000000[…])

这对我来说是完全合乎逻辑的,但我不知道如何正确地做,所以如果有人知道,请告诉我怎么做,因为我现在有点沮丧

一个明显的错误是内部while循环是无限的。您需要使用inDataLength变量限制它。