2015-08-18 88 views
0

在你将这篇文章标记为重复之前:我尝试了所有可以在互联网和计算器周围找到的“解决方案”,但没有任何工作,主要是因为某些函数被弃用或者我错过了一些图书馆或其他东西。使用C++的HTTP POST请求

我得到了下面的代码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中说:异常引发的0x00AE5F02在PROJECT1.EXE:0000005:访问冲突在位置00000000 [阅读。 ..])

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

回答

2

一个明显的错误是你的inner while循环是无限的。 您需要使用inDataLength变量进行限制。

+0

哇,这是愚蠢的,thx –