Pobieranie html w C

0

Witam. Chciałbym pobrać źródło strony w C. Posiadam taki kod, ale zwraca on html strony głównej a ja chce żeby zwrócił html np strony Wprowadzenie do wątków
Co ja robie źle?

	char buffer1[1024];
	char *mess;
	
	WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
        MessageBox(NULL, buffer1,"WSA startup failed",MB_ICONINFORMATION|MB_OK);
        system("pause");
        return 1;
    }
    SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    struct hostent *host;
    host = gethostbyname("http://4programmers.net/");
    SOCKADDR_IN SockAddr;
    SockAddr.sin_port=htons(80);
    SockAddr.sin_family=AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
     //MessageBox(NULL, buffer1,"Connecting",MB_ICONINFORMATION|MB_OK);
    if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
        MessageBox(NULL, buffer1,"Could not connect",MB_ICONINFORMATION|MB_OK);
        system("pause");
        return 1;
    }
    //MessageBox(NULL, buffer1,"Connected",MB_ICONINFORMATION|MB_OK);
  
    mess = "GET /?st=1 HTTP/1.1\r\nHost: http://4programmers.net/C_sharp/Wprowadzenie_do_w%C4%85tk%C3%B3w\r\n\r\n";
    if(send(Socket , mess , strlen(mess) , 0) < 0)
    {
       
    }
	char buffer[7000];
    int nDataLength;
    
   // MessageBox(NULL, buffer,"test2",MB_ICONINFORMATION|MB_OK);
    while ((nDataLength = recv(Socket,buffer,7000,0)) > 0){        
        //int i = 0;
        MessageBox(NULL, buffer, "Connecting",MB_ICONINFORMATION|MB_OK);
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            MessageBox(NULL, buffer, "Connecting",MB_ICONINFORMATION|MB_OK);
            i += 1;
        }
    }
    closesocket(Socket);
        WSACleanup();
 
0
mess = "GET /?st=1 HTTP/1.1\r\nHost: http://4programmers.net/C_sharp/Wprowadzenie_do_w%C4%85tk%C3%B3w\r\n\r\n";

Host to host, potrzebny jest aby serwer wiedział o jaki portal chodzi, bo może zawierać kilka różnych, np. wp.pl interia.pl itp mogą być na tym samym serwerze.
W tym wypadku będzie:

Host: 4programmers.net

O jaką zaś podstrone chodzi, wpisuje się w GET:

GET /C_sharp/Wprowadzenie_do_w%C4%85tk%C3%B3w
0

Zmieniłem tak jak mówiłeś i bez efektu. Teraz nic się nie wyświetla...

char buffer1[1024];
    char *mess;
 
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) {
        MessageBox(NULL, buffer1,"WSA startup failed",MB_ICONINFORMATION|MB_OK);
        system("pause");
        return 1;
    }
    SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    struct hostent *host;
   host = gethostbyname("4programmers.net");
    SOCKADDR_IN SockAddr;
    SockAddr.sin_port=htons(80);
    SockAddr.sin_family=AF_INET;
    SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr);
     //MessageBox(NULL, buffer1,"Connecting",MB_ICONINFORMATION|MB_OK);
    if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){
        MessageBox(NULL, buffer1,"Could not connect",MB_ICONINFORMATION|MB_OK);
        system("pause");
        return 1;
    }
    //MessageBox(NULL, buffer1,"Connected",MB_ICONINFORMATION|MB_OK);
 
    mess = "GET /C_sharp/Wprowadzenie_do_w%C4%85tk%C3%B3w";
    if(send(Socket , mess , strlen(mess) , 0) < 0)
    {
 
    }
    char buffer[7000];
    int nDataLength;
 
   // MessageBox(NULL, buffer,"test2",MB_ICONINFORMATION|MB_OK);
    while ((nDataLength = recv(Socket,buffer,7000,0)) > 0){        
        //int i = 0;
        MessageBox(NULL, buffer, "Connecting",MB_ICONINFORMATION|MB_OK);
        while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
            MessageBox(NULL, buffer, "Connecting",MB_ICONINFORMATION|MB_OK);
            i += 1;
        }
    }
    closesocket(Socket);
        WSACleanup(); 
1

Poczytaj o HTTP

https://pl.wikipedia.org/wiki/Hypertext_Transfer_Protocol

mess = "GET /C_sharp/Wprowadzenie_do_w%C4%85tk%C3%B3w HTTP/1.1\r\nHost: 4programmers.net\r\n\r\n";
0

Działa. Dzięki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1