C HTTP request

The Earl

The Earl

Grünschnabel
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
 
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.
 
@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);
	}
[...]
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Prozesskommunikation mit PIPES - wie funktioniert das?

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

[C] Speicherzugriffsfehler mit malloc

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Zurück
Oben