Re: OT: Lesen einer Datei von HTML-Server

From: Peter Wullinger <peter.wullinger(at)gmail.com>
Date: Wed, 5 Jan 2005 10:40:30 +0100

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 message
Received on Wed 05 Jan 2005 - 10:59:50 CET

search this site