CPPRESTSDK Kompression/Dekompression gzip/deflate



  • Hallo.

    a) Ich habe die Frage auch auf StackOverflow gestellt, aber warte da schon ne Weile auf eine Antwort -.-
    link_zu_stackoverflow
    b) Ich bin mir nicht sicher hier im richtigen Forenbereich zu sein... Da die Anwendung aber MFC nutzt und kein klassisches Webzeug ist, habe ich mich für diesen Bereich entschieden.

    Zur Frage:

    Ich versuche einen Rest-Endpunkt auf meinem Server anzusprechen. Die Antwort kann vom Server komprimiert werden, wenn es der Client fordert. Bei Versuchen mit Postman und ähnlichen Tools hat sich gezeigt, dass die Antwort komprimiert wird.

    Sobald ich aber versuche die Kompression/Dekompression beim CPPRestSDK zu nutzen, bekomme ich nur Fehlermeldungen.

    Den Client erstellen

    static http_client_config config;
        config.set_validate_certificates(false);
        config.set_request_compressed_response(true);
        static http_client client(uri, config);
        pClient = &client;
    

    Header zusammen bauen

    request.set_method(method);
        request.set_request_uri(uri::encode_uri(string_t(sUri)));
        request.headers().add(string_t(AUTHENTICATION_HEADER_KEY), string_t(m_sAuthenticationID));
        request.headers().add(U("Accept-Encoding"), U("gzip, deflate"));
    

    Die Abfrage feuern und auswerten

    pplx::task<http_response> task = pClient->request(*pRequest);
    
    try
    {
        task.then([&](http_response response)
        {
            unsigned short statuscode = response.status_code();
                    if (statuscode >= 200 && statuscode < 300)
            {
                try
                {
    
                    if (pJsonResult)
                        *pJsonResult = response.extract_json().get();
    ...
    

    Der Header der Antwort --> gzip wurde verwendet

    Header=Content-Encoding:gzip
    Header=Content-Length:63
    Header=Content-Type:application/json
    Header=Date:Tue, 27 Feb 2018 09:36:12 GMT
    Header=Server:XXX
    Header=Set-Cookie:JSESSIONID=XXXXX; Path=/XXX/XXX; HttpOnly
    Header=Vary:Accept-Encoding
    Header=X-Frame-Options:SAMEORIGIN
    

    Laut Microsoft kann das SDK seit 2.10 gzip/deflate und erkennt es automatisch.

    Wenn ich die Antwort als "string" abhole, kommt etwas sehr kryptisches bei raus, was aber von der Länge (Content-Length) passen würde. Ich habe aber keine Ahnung, was ich mit dem String machen sollte um ihn in mein erwartes json zu transformieren...

    Ich hoffe ihr habt eine Anregung für mich. 🙂

    Grüße
    Bara


Log in to reply