s korhani
s korhani

Reputation: 356

How to add headers of HTTP request to response

Sorry if the question is possibly repeated. I'm not familiar with Java and I'm stuck with a Cordova plugin which returns headers in a non-JSON structure which I think is Map.soString() presentation of request.headers()

//These parts works fine returning response body

HttpRequest request = HttpRequest.post(this.getUrlString());
this.setupSecurity(request);
request.headers(this.getHeaders());
request.acceptJson();
request.contentType(HttpRequest.CONTENT_TYPE_JSON);
request.send(getJsonObject().toString());
int code = request.code();
String body = request.body(CHARSET);
JSONObject response = new JSONObject();
response.put("status", code);

// in this line I must put JSON converted headers instead of request.headers()
response.put("headers", request.headers());

I've tried

String headers = request.headers().toString();

and

JSONObject headers = new JSONObject(request.headers());

to change the aforementioned line to

response.put("headers", headers);

but none of them worked.
How should I send headers as JSON in response?

More context:
Currently the response headers are:

{
    null=[HTTP/1.0 200 OK],
    Content-Type=[application/json],
    Date=[Mon, 25 Jan 2016 07:47:31 GMT],
    Server=[WSGIServer/0.1 Python/2.7.6],
    Set-Cookie=[csrftoken=tehrIvP7gXzfY3F9CWrjbLXb2uGdwACn; expires=Mon, 23-Jan-2017 07:47:31 GMT; Max-Age=31449600; Path=/, sessionid=iuza9r2wm3zbn07aa2mltbv247ipwfbs; expires=Mon, 08-Feb-2016 07:47:31 GMT; httponly; Max-Age=1209600; Path=/],
    Vary=[Accept, Cookie],
    X-Android-Received-Millis=[1453708294595],
    X-Android-Sent-Millis=[1453708294184], X-Frame-Options=[SAMEORIGIN]
}

and are sent in body of response. so I need to parse them, but I can't do.

Upvotes: 2

Views: 2454

Answers (1)

Stephen C
Stephen C

Reputation: 719386

This should be the way to do it:

JSONObject headers = new JSONObject(request.headers());

However, the "toString()" display of the headers seem to be showing a map entry with a null key. That won't work in JSON: an JSON object attribute name cannot be null. My guess is that the null key caused the crash.

So I think you need to filter out the "bad" entry; i.e. code it something like this:

JSONObject headers = new JSONObject()
for (Map.Entry entry: request.headers().entries()) {
    if (entry.getKey() != null) {
        headers.put(entry.getKey(), entry.getValue());
    } 
}

Upvotes: 2

Related Questions