Mit welcher Lib kann ich das Encoding gzip, deflate, sdch downloaden?
-
Ich möchte gern eine (komprimierte) Textdatei mit dem
Accept-Encoding: gzip, deflate, sdch
dowloaden. Wäre das mit curl möglich und wenn ja wie kann ich es aufrufen?
-
Suchst du das? https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html
-
Ahhh, super, danke, Example, @wob :
/* enable all supported built-in compressions */
curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
-
Noch eine Frage. Schickt er dann auch das gewünschte Encoding im Request Header mit? Oder wie wählt der Server seine Antwort? Wie schaut das Kommunikationsprotokoll?
Es geht um eine 2,5 GB-Textdatei mit vielen Zeilenumbrüchen - komprimiert kann eine viel kleinere Menge übertragen werden.
Auf Client-Seite brauche ich die Datei dann natürlich unkomprimiert...
-
Es lüppt.
void loadData1(const char *url, const char *filename) { CURL *curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, url); /* enable all supported built-in compressions */ curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, ""); FILE *fp = fopen(filename, "wb"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); time_t t1 = time(0); /* Perform the request, res will get the return code */ CURLcode res = curl_easy_perform(curl); time_t t2 = time(0); cout << (t2 - t1) << " Sek " << ((t2 - t1) / 60.0) << " Min" << endl; /* Check for errors */ if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } /* always cleanup */ curl_easy_cleanup(curl); fclose(fp); } }
Für 200 MB braucht er zum Bleistift 10 Sekunden und da das 4-mal schneller als meine Anschluss ist, gehe ich davon aus dass alles stark komprimiert gesendet/empfangen wird...