HTTP Socket Seitenquelltext C++



  • Hallo Leute,

    ich bin auf der Suche nach eine Möglichkeit den Seitenquelltext einer Website in eine char-Variable zu schreiben um diesen String dann weiter verarbeiten zu können.

    Mit meinem Script bin ich nun soweit, dass es ich per Socket eine Anfrage an meinen Webserver schicken kann.

    Hier ein kurzer Auszug:

    st_Sockaddr.sin_addr.s_addr = inet_addr("208.77.188.166");
    success = connect(skt_Smtp,(struct sockaddr *) &st_Sockaddr,sizeof(st_Sockaddr));
    strcpy(send_Buf,"GET /index.html HTTP/1.1\r\nHost: www.example.org\r\n\r\n");
    s_len = send(skt_Smtp,send_Buf,strlen(send_Buf),0);
    

    Ich habe nun das Problem, dass ich den Quellcode in eine Variable übertragen muss.
    Zurzeit funktioniert es soweit, dass ich mir die Rückgabe in einen Puffer schreibe und diesen nach und nach ausgeben kann.

    do
    {
    	i = recv(skt_Smtp, recv_Buf, MAX_LENGTH, 0);
    	if(i < 0)
    	{
    		printf("recv() returned %d, errno=%d\n", i, errno);
    		break;
    	}
    	if(i > MAX_LENGTH)
    	{
    		i = MAX_LENGTH;
    	}
    
    	printf("%-*.*s", i, i, recv_Buf);
    }
    while(i != 0);
    

    Ich brauche das Ergebnis aber alles in einem String.
    Ist bestimmt ganz einfach, blos ich bin zu dumm 🤡.

    Im Forum habe ich zum Thema Sockets schon gelesen, aber nicht auf die Lösung gekommen.
    Das Thema curl würde ich gern vermeiden, da ich mich eh in Sockets einarbeiten möchte und dieses Script eine schöne Übung ist.

    Ich Programmiere beruflich schon ein paar Jahre PHP und hätte nicht erwartet, dass ich jetzt so auf dem Schlauch stehe 👎.

    Wenn noch mehr Quellcodeauszüge benötigt werden, dann bitte einfach schreiben.
    Das ganze soll/läuft unter Linux.

    Ich bedanke mich schonmal für eure Hilfe!

    Grüße Jake



  • jake schrieb:

    Hallo Leute,

    ich bin auf der Suche nach eine Möglichkeit den Seitenquelltext einer Website in eine char-Variable zu schreiben um diesen String dann weiter verarbeiten zu können.

    Mit meinem Script bin ich nun soweit, dass es ich per Socket eine Anfrage an meinen Webserver schicken kann.

    Hier ein kurzer Auszug:

    st_Sockaddr.sin_addr.s_addr = inet_addr("208.77.188.166");
    success = connect(skt_Smtp,(struct sockaddr *) &st_Sockaddr,sizeof(st_Sockaddr));
    strcpy(send_Buf,"GET /index.html HTTP/1.1\r\nHost: www.example.org\r\n\r\n");
    s_len = send(skt_Smtp,send_Buf,strlen(send_Buf),0);
    

    Ich habe nun das Problem, dass ich den Quellcode in eine Variable übertragen muss.
    Zurzeit funktioniert es soweit, dass ich mir die Rückgabe in einen Puffer schreibe und diesen nach und nach ausgeben kann.

    do
    {
    	i = recv(skt_Smtp, recv_Buf, MAX_LENGTH, 0);
    	if(i < 0)
    	{
    		printf("recv() returned %d, errno=%d\n", i, errno);
    		break;
    	}
    	if(i > MAX_LENGTH)
    	{
    		i = MAX_LENGTH;
    	}
    	
    	printf("%-*.*s", i, i, recv_Buf);
    }
    while(i != 0);
    

    Ich brauche das Ergebnis aber alles in einem String.
    Ist bestimmt ganz einfach, blos ich bin zu dumm 🤡.

    Im Forum habe ich zum Thema Sockets schon gelesen, aber nicht auf die Lösung gekommen.
    Das Thema curl würde ich gern vermeiden, da ich mich eh in Sockets einarbeiten möchte und dieses Script eine schöne Übung ist.

    Ich Programmiere beruflich schon ein paar Jahre PHP und hätte nicht erwartet, dass ich jetzt so auf dem Schlauch stehe 👎.

    Wenn noch mehr Quellcodeauszüge benötigt werden, dann bitte einfach schreiben.
    Das ganze soll/läuft unter Linux.

    Ich bedanke mich schonmal für eure Hilfe!

    Grüße Jake

    Nimm einen std::string und füge dann immer hinten an. Zum Runterladen der Seite könntest du auch libcurl nutzen.



  • Hi BBBB,

    danke für deine schnelle Antwort.
    Auf curl wollte ich erstmal mit absicht verzeichten, aber trotzdem danke.

    Ich habe mir nun einen std::string definiert, aber jetzt fehlen wir wohl die richtigen Befehle 😞

    Die aktuelle Ausgabe der Puffer-Position habe ich mit folgenden Code gemacht:

    printf("%-*.*s", i, i, recv_Buf);
    

    Aber mit welchem Befehl bekomme ich das ganze in den string?

    Danke schonmal,

    Jake



  • hi

    std::string str;
    do
    {
        i = recv(skt_Smtp, recv_Buf, MAX_LENGTH, 0);
        if(i < 0)
        {
            printf("recv() returned %d, errno=%d\n", i, errno);
            break;
        }
        if(i > MAX_LENGTH)
        {
            i = MAX_LENGTH;
        }
    
        //printf("%-*.*s", i, i, recv_Buf);
        str += std::string(recv_Buf, i);
    }
    while(i != 0); 
    
    // nun hast alles in str
    

    meep meep


Anmelden zum Antworten