C HTTP request

Dieses Thema im Forum "C/C++" wurde erstellt von The Earl, 05.03.2011.

  1. #1 The Earl, 05.03.2011
    The Earl

    The Earl Grünschnabel

    Dabei seit:
    03.11.2010
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo Community,

    in meinem derzeitigen Projekt geht es darum, eine HTTP Anfrage an einen Server zu schicken.

    Zum Programm, hier der kommentierte Programmcode:
    Code:
    #include <stdio.h>
    #include <netdb.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    
    int main(int argc, char *argv[]) {
    	// IP des Host's ermitteln
    	struct hostent *gethost = gethostbyname("www.google.com");
    	struct in_addr **addrlist = (struct in_addr **)gethost -> h_addr;
    	struct sockaddr_in addr;
    	
    	//Socket initialisieren und...
    	int sock = socket(AF_INET,SOCK_STREAM,0);
    	if (sock == -1) {
    		perror("socket() failed");
    		return 1;
    	}
    	
    	//konfigurieren
    	addr.sin_addr.s_addr = inet_addr(inet_ntoa(*addrlist));
    	addr.sin_port = htons(80);
    	addr.sin_family = AF_INET;
    	
    	//Verbinden
    	if (connect(sock,(struct sockaddr *)&addr,sizeof(addr)) == -1) {
    		perror("connect() failed");
    		return 2;
    	}
    	
    	//HTTP request initialisieren...
    	char sendbuf[] = "GET / HTTP/1.1\nHost: www.google.com\n\r\n\r";
    	
    	//und senden
    	if (send(sock,sendbuf,sizeof(sendbuf),0) == -1) {
    		perror("send() failed");
    		return 3;
    	}
    	
    	//Daten empfangen und ausgeben
    	char buf[1024];
    	while (recv(sock,buf,sizeof(buf)-1,0)) {
    		printf("%s",buf);
    	}
    	
    	return 0;
    }
    Dank besserer syntax highlight auch auf Nopaste:
    http://nopaste.me/paste/4d71b23008e14

    Jetzt möchte ich jedoch statt dem Ausgeben auf stdout, die empfangenen Daten in eine Variable schreiben.

    Ich hoffe der Code ist verständlich und mir kann geholfen werden.

    MFG Earl
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bitmuncher, 05.03.2011
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Die Daten sind nach dem recv() ja bereits in der Variable 'buf'. Du musst lediglich ein dynamisches Array deklarieren und allozieren und den Inhalt von buf in der while-Schleife an dieses Array anfügen.
     
  4. #3 The Earl, 05.03.2011
    The Earl

    The Earl Grünschnabel

    Dabei seit:
    03.11.2010
    Beiträge:
    9
    Zustimmungen:
    0
    @bitmuncher
    Ich habe gehofft, dass ich methoden wie Malloc umgehen kann.

    Würde folgendes denn funktionieren (zurzeit auf der Arbeit und keinen Kompiler dabei) ?:
    Code:
    [...]
    	//Daten empfangen und ausgeben
    	char *content;
    	char buf[1024];
    	while (recv(sock,buf,sizeof(buf)-1,0)) {
    		strcat(content,buf);
    	}
    [...]
    
     
Thema:

C HTTP request

Die Seite wird geladen...

C HTTP request - Ähnliche Themen

  1. http request Download mit php5_curl

    http request Download mit php5_curl: Hallo, ich habe (versucht) ein PHP Script(CLI) zu schreiben, welches mit cURL ein PDF herunterladen und speichern soll. Das klappt bei einer...
  2. Mozilla will ungesichertes HTTP zurückdrängen

    Mozilla will ungesichertes HTTP zurückdrängen: Mozilla will erreichen, dass Webseiten möglichst nur noch verschlüsselt übertragen werden. Dazu müssen die Webseitenbetreiber HTTPS statt HTTP...
  3. Named Pipe und Lighttpd

    Named Pipe und Lighttpd: Hey, ich habe ein kleines Problem, bei dem ich nicht weiß, wie ich vorgehen soll. Im Prinzip ist mein Anliegen nicht schwer (denke ich mal). Auf...
  4. Https und samba

    Https und samba: Hallo, also ich habe ein Ordner namens data mit 100 GB gemountet diesen möchte ich nun mittels https erreichbar machen. Also das ich im Browser...
  5. Squid als RPCoHTTPS Proxy für Outlook Anywhere

    Squid als RPCoHTTPS Proxy für Outlook Anywhere: Hallo Community, ich habe bereits versucht in einem anderen Forum Hilfe zu finden leider ohne Erfolg, darum versuche ich nochmal hier mein...