Extract query parameters
Extract query parameters, transform them, and add them in to the response body.
The following example walks you through how to use an Inja template to find specific query parameters in a request, extract the parameter values, and to add these values to specific response headers.
Before you begin
Follow the Get started guide to install Gloo Gateway, set up a gateway resource, and deploy the httpbin sample app.
Get the external address of the gateway and save it in an environment variable.
Extract query parameters
Create a VirtualHostOption resource with your transformation rules. In the following example, you use a regular expression to find the
foo
andbar
query parameters in the request path and to capture their values. Then, these values are added to the response headersfoo-response
andbar-response
.kubectl apply -n gloo-system -f- <<EOF apiVersion: gateway.solo.io/v1 kind: VirtualHostOption metadata: name: transformation namespace: gloo-system spec: options: transformations: requestTransformation: transformationTemplate: extractors: # This extracts the 'foo' query param to an extractor named 'foo' foo: # The :path pseudo-header contains the URI header: ':path' # Use a nested capturing group to extract the query param regex: '(.*foo=([^&]*).*)' subgroup: 2 # This extracts the 'bar' query param to an extractor named 'bar' bar: # The :path pseudo-header contains the URI header: ':path' # Use a nested capturing group to extract the query param regex: '(.*bar=([^&]*).*)' subgroup: 2 # Add two new headers with the values of the 'foo' and 'bar' extractions headers: foo-response: text: '{{ foo }}' bar-response: text: '{{ bar }}' targetRefs: - group: gateway.networking.k8s.io kind: Gateway name: http namespace: gloo-system EOF
Send a request to the httpbin app and include the
foo
andbar
query parameters. Verify that you get back a 200 HTTP response code and that the value of thefoo
andbar
query parameters were added to the response headersfoo-response
andbar-response
.Example output:
... { "args": { "bar": [ "bar-value" ], "foo": [ "foo-value" ] }, "headers": { "Accept": [ "*/*" ], "Bar-Response": [ "bar-value" ], "Foo-Response": [ "foo-value" ], "Host": [ "www.example.com:8080" ], "User-Agent": [ "curl/7.77.0" ], "X-B3-Sampled": [ "0" ], "X-B3-Spanid": [ "5003b7987ed56d7f" ], "X-B3-Traceid": [ "eac0a28ecb32b9e15003b7987ed56d7f" ], "X-Forwarded-Proto": [ "http" ], "X-Request-Id": [ "b43982a7-cdb5-4bab-9ce5-cba0cf4c2ae5" ] }, "origin": "127.0.0.6:41223", "url": "http://www.example.com:8080/anything?foo=foo-value&bar=bar-value", "data": "", "files": null, "form": null, "json": null }
Cleanup
You can remove the resources that you created in this guide.
kubectl delete virtualhostoption transformation -n gloo-system