ViaThinkSoft CodeLib
This article is in:
CodeLib → Programming aids → C / C++
Mit folgendem Code kann der Inhalt einer Webseite ausgelesen werden.
Die Library CURL muss ggf. vorher mit "apt-get install libcurl3-dev" installiert werden. Beim Kompilieren mit GCC muss der Parameter "-lcurl" angegeben werden.
Anmerkung: Ist die Ausgabe leer, dann ist buffer "\0". Prüfung also mittels:
ToDo: C-Kompatibel machen, mit char* arbeiten.
Die Library CURL muss ggf. vorher mit "apt-get install libcurl3-dev" installiert werden. Beim Kompilieren mit GCC muss der Parameter "-lcurl" angegeben werden.
const char* USER_AGENT = "Mein Crawler Name";
#include <curl/curl.h>
// This is the writer call back function used by curl
static int writer(char *data, size_t size, size_t nmemb, std::string *buffer)
{
// What we will return
int result = 0;
// Is there anything in the buffer?
if (buffer != NULL)
{
// Append the data to the buffer
buffer->append(data, size * nmemb);
// How much did we write?
result = size * nmemb;
}
return result;
}
void http_curl (char* url) {
CURL *curl;
curl = curl_easy_init();
if(curl) {
// Infos: http://us3.php.net/curl_setopt
// URL übergeben
curl_easy_setopt(curl, CURLOPT_URL, url);
// Keine Kopfzeile einblenden
curl_easy_setopt(curl, CURLOPT_HEADER, false);
// Verbindung danach beenden
curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, true);
// Pufferoptionen
char errorBuffer[CURL_ERROR_SIZE];
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
string buffer;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
// Benutzerdefinierter User-Agent-Name
curl_easy_setopt(curl, CURLOPT_USERAGENT, USER_AGENT);
// Einen Timeout setzen
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 180);
// Sehr wichtig, wenn man mit Threads arbeitet
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, true);
curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
// Weiterleitungen beachten, aber nur max. 50x
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50);
// Einen HTTP-Fehler-Statuscode beachten
curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);
// SSL-Zertifikate nicht prüfen (Warnung! Sicherheitslücke)
// http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
// Abfrage ausführen und Resultat speichern
CURLcode res;
res = curl_easy_perform(curl);
// Clean up
curl_easy_cleanup(curl);
// Alles OK?
if (res == CURLE_OK)
{
cout << buffer << "\n";
}
else
{
cout << "Error: [" << res << "] - " << errorBuffer;
}
}
}
Anmerkung: Ist die Ausgabe leer, dann ist buffer "\0". Prüfung also mittels:
if (buffer == "\0") {
cout << "Kein Inhalt";
}
ToDo: C-Kompatibel machen, mit char* arbeiten.
Daniel Marschall
ViaThinkSoft Co-Founder
ViaThinkSoft Co-Founder