2015-12-17 24 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