2015-12-17 27 views
0

我試圖實現一個http獲取請求。 但是,回覆不好,我沒有收到請求的內容。錯誤套接字更新C++

我有以下代碼:

WSADATA wsaData; 
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { 
     std::cout << "WSAStartup failed.\n"; 
     system("pause"); 
     return 1; 
    } 
    SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
    struct hostent *host; 
    host = gethostbyname("www.httpbin.org"); 
    SOCKADDR_IN SockAddr; 
    SockAddr.sin_port = htons(80); 
    SockAddr.sin_family = AF_INET; 
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr); 
    std::cout << "Connecting...\n"; 
    if (connect(Socket, (SOCKADDR*)(&SockAddr), sizeof(SockAddr)) != 0){ 
     std::cout << "Could not connect"; 
     system("pause"); 
     return 1; 
    } 
    std::cout << "Connected.\n"; 
    const char* httpRequest = "GET/HTTP/1.1\r\nHost:www.httpbin.org/get\r\nConnection: close\r\n\r\n"; 
    send(Socket, httpRequest, strlen(httpRequest), 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') { 
      std::cout << buffer[i]; 
      i += 1; 
     } 
    } 
    closesocket(Socket); 
    WSACleanup(); 
    system("pause"); 
    return 0; 

我不能undersand爲什麼我收到此:

HTTP/1.1 400 Bad Request 
Server: nginx 
Date: Thu, 17 Dec 2015 20:49:05 GMT 
Connection: close 
Content-Type: text/html 
Content-Length: 166 

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

如果我把google.com它的作品。 我想念什麼? 所以我的第一個問題是錯誤是什麼。 第二個問題是在此代碼中添加什麼來獲取文件。

我替換此行:

"GET file.txt/HTTP/1.1\r\nHost:www.httpbin.org/get\r\nConnection: close\r\n\r\n" 

,但它不工作。

回答

1

您的請求字符串改成這樣 - >

"GET /get\r\nHost:www.httpbin.org\r\n\r\n" 

OR

"GET /get\r\nHost:www.httpbin.org\r\nConnection: close\r\n\r\n" 
+0

這兩個方法的作品。謝謝。 – user5692672

0

「Host:www.httpbin.org/get」是不正確的。你只需要這裏的主機名 - 「主機:www.httpbin.org」。

+0

沒有...不輸入反應work.The應該http://httpbin.org/get 。我現在得到的是完整的html網頁。 – user5692672

+0

問題是你的要求。 –

+0

@dboals解決方案作品 – user5692672