In epistula a Wittig Christoph, die horaque Tue, Jan 04, 2005 at 03:56:13PM +0100:
> Hallo,
Guten Morgen,
> etwas am Thema vorbei, aber vielleicht kann ja jemand
> mal mit der Zaunlatte winken:
> Was muss man in C anstellen, um eine auf einem
> HTML-Server befindliche Datei zum Lesen oeffnen
> zu koennen.
Da gibt es jetzt natürlich mehrere Möglichkeiten:
1. Die Bastler-Methode:
- Eine TCP/IP-Verbindung zum Webserver aufbauen
(siehe socket(), connect())
- Über diese Verbindung eine HTTP-Anfrage schicken:
GET <url> HTTP/1.1\n
Hostname: <hostname>\n
<sonstige header>
\n
- Und dann die Daten auslesen
2. Die "für sowas gibt es schon eine gute Bibliothek"-Methode:
- libcurl installieren (/usr/ports/ftp/curl/)
- man libcurl-easy
- etwa so:
#include <stdio.h>
#include <curl/curl.h>
size_t
write_data(void *ptr, size_t size, size_t nmemb, void *stream)
{
printf("Got %d bytes ...", size * nmemb);
return(size * nmemb);
}
int
main(void)
{
CURL *curl;
curl if (curl perror("cURL did not initialize\n");
return(1);
}
curl_easy_setopt(curl, CURLOPT_URL, "http://www.de.freebsd.org/");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_perform(curl);
printf("Transfer done\n");
curl_easy_cleanup(curl);
return(0);
}
3. Die "Unix hat doch Werkeuge für so etwas und Pipes waren schon immer gut"-
Version
- curl (bevorzugt, da wget ziemliche Sicherheits-Probleme hat)
oder wget installieren, Beziehungsweise unter FreeBSD
gleich fetch nehmen:
handle <daten in schleife lesen>
if (pclose(handle) ! <fehlerbehandlung>
Der erste Weg ist die typische "Hacker"-Methode und nur für entsprechend
veranlagte Personen zu empfehlen. Welche von den anderen beiden Methoden
du wählst hängt von dir ab, es gibt Argumente für beide:
- bei (3) kann man das Program zur Laufzeit austauschen, also
per Konfigurationsparameter zwischen wget, curl, fetch und
was weiß ich noch wählen
- Außerdem ist es bei (3) möglich den "URL-Fetcher"-Prozeß in
einem anderen Sicherheitskontext laufen zu lassen.
- In (2) hat man den Vorteil, daß libcurl sehr gute Fehlercodes
liefert, die man relativ einfach auswerten kann.
- Zusätzlich hat man in (2) relativ große Kontrolle über
den Datenverkehr.
Gruß,
Peter
-- The history of the world is full of men who rose to leadership, by sheer force of self-confidence, bravery and tenacity. -- Mahatma Gandhi To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Wed 05 Jan 2005 - 10:59:50 CET