2015-08-18 89 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 –