LibCURL und gzip

badday

Erfahrenes Mitglied
Moin zusammen,

ich versuche gerade eine Datei gezippt von einem Server herunterzuladen mit libcurl. Folgendes kleine Programm zeigt, was ich mache:

Code:
#include <iostream>
#include <string>

#include <fstream>
#include <stdio.h>


#include "curl.h"
#include "types.h"
#include "easy.h"

#define HAVE_LIBZ

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}



int main(int argc, char* argv[])
{
	std::string targetaddress = "http://exampleaddress.de/test.txt";
	std::string filename = "./test.txt";
	CURL *curl;	
	FILE *fp;
	CURLcode res;
	curl = curl_easy_init();
	if (curl)
		{
			fp = fopen(filename.c_str(),"wb");
			struct curl_slist *headers=NULL;
			headers = curl_slist_append(headers, "ACCEPT_ENCODING: gzip");
			curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
			curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip");
			curl_easy_setopt(curl, CURLOPT_URL, targetaddress.c_str());
			curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
			curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
			res = curl_easy_perform(curl);
			curl_easy_cleanup(curl);
			fclose(fp);
		}
}

Allerdings wird es nicht komprimiert geschickt. Als res bekomme ich CURLE_OK zurück, die Datei wird auch korrekt erstellt etc.


Ich wäre sehr dankbar, wenn mir jemand sagen könnte, was ich vergessen habe :)



Gruß,

badday
 
Hi,
ich bin zwar eigentlich Java Entwickler aber ich denke das ich bei diesem Problem auch helfen kann. Ich vermute das der Server nichts mit dem Header Encoding : gzip anfangen kann. Versuche staattdessen mal sowas in deflate oder was auch immer sonst noch so zur zlib gehört. Es kann auch sein das der Server zwar den Header versteht aber kein Modul installiert hat um auch wirklich komprimierte Daten zu senden *was ich für unwahrscheinlich halte da er normalerweise ohne gzip-Modul auch den Header icht versteht*. Versuche das ganze mal bei einem Server bei dem sicher ist das dieser auch gzip-Daten senden kann.
 
Der Server läuft mit nginx, dort musste eine config-Datei angepasst werden. Da ich damit wenig am Hut habe und für diese Sache jemand anderes zuständig ist, kann ich dir leider nichts genaueres sagen.


Gruß,

badday
 
Ok, trotzdem danke. Hat sich an den Headern was geändert, die der Server liefert? Wäre ein Anhaltspunkt für das, was geändert wurde. Sei's drum, so wichtig ist es auch nicht.
 
Zurück