<

VBA How To Decompress a Gzip Response From a HTTP Request

Published on
3,971 Points
971 Views
Last Modified:
There are times when I have encountered the need to decompress a response from a PHP request.
This is how it's done, but you must have control of the request and you can set the Accept-Encoding header.

In this example, I needed to get a currency exchange rate for two currencies, in order to use them in an expense report. I am using MS Access and macros.


I've found a site where I can easily send the currency parameters I needed and the response was returned as a JSON structure, which is easy to manipulate. 


However, when I've checked the request (in WireShark), in order to use it in a macro function, I saw that the result was gibberish:

?      ?V*?-JNU?Rr

R?*I,JO-r=}??\?lpi.P?.
?Y?[?%??? 1P???????????B<l?T- ??Vu   



I then started to look for an idea of what might be the "problem". I needed the response data in plain text, much like a browser knows to show you when it performs the same request.


I saw a post about this here - MS Access VBA How To Decompress a Gzip Response From a HTTP Request and it got me thinking about the compression, since an "Accept-Encoding" header in the request has "gzip" as its value.


I looked for the possible values for the Accept-Encoding header and I leaned that in order to get the response as plain text, I needed to use deflate, as in the example below:

Accept-Encoding: identity, deflate

and not 

Accept-Encoding: identity, gzip;q=0


This tells the server to not use compress the response with gzip and instead to send me the plain text (or uncompressed, i.e. deflate) version of the response.


The reason the response is compressed is to be more efficient with bandwidth.  With larger datasets it may be necessary to deflate the response on the client if the uncompressed version is far larger than the compressed version.


Now, after modifying this header, I received the response I needed, which made it far easier to parse in my macro:

{"source":"EUR","target":"USD","sourceSum":"1","targetSum":3.9793,"rateDate":"01-06-2017","rateDateSet":"01-06-2017"}


It solved my problem and I hope it'll help all the others.


Have a great day,

Shai

0
Comment
Author:Shai Alon
1 Comment
 
LVL 1

Author Comment

by:Shai Alon
You're right, and I'm sorry.
I was frustrated from that post that it bothered me that the answer seemed simple.
I've modified the post to be neutral and answer the question only.

Regards,
Shai
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Join & Write a Comment

The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
Get the source code for a fully functional Access application shell with several popular security features that Access VBA application developers desire, but find difficult or impossible to figure out how to code. You get the source code for managi…
Suggested Courses

Keep in touch with Experts Exchange

Tech news and trends delivered to your inbox every month