gpt4 book ai didi

c++ - 使用 C++ 的 HTTP POST 请求

转载 作者:行者123 更新时间:2023-11-28 02:22:03 24 4
gpt4 key购买 nike

在您将这篇文章标记为重复之前:我已经尝试了所有可以在 Internet 和 stackoverflow 上找到的“解决方案”,但没有任何效果,主要是因为某些功能已被弃用,或者我缺少一些库或其他东西。

我得到以下代码 here (第二个答案是因为我无法让 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.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n", strlen("GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"), 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 说:在 Project1.exe 中的 0x00AE5F02 处触发异常:0xC0000005:在位置 0x00000000 [...] 处读取访问冲突)

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

最佳答案

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

关于c++ - 使用 C++ 的 HTTP POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32065722/

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