Skip to content

Commit e428404

Browse files
author
Vladimir Enchev
committed
Merge pull request NativeScript#1707 from NativeScript/http-headers
Allow multiple headers with the same name to be retrieved from a HTTP response
2 parents 243cc13 + c9c703c commit e428404

File tree

5 files changed

+45
-6
lines changed

5 files changed

+45
-6
lines changed

apps/tests/http-tests.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,27 @@ export var test_request_headersSentAndReceivedProperly = function (done) {
535535
});
536536
};
537537

538+
export var test_request_headersWithSameKeyAddedProperly = function (done) {
539+
var keyName = "key";
540+
var value1 = "value1";
541+
var value2 = "value2";
542+
543+
var headers = {};
544+
545+
(<any>http).addHeader(headers, keyName, value1);
546+
(<any>http).addHeader(headers, keyName, value2);
547+
548+
try {
549+
TKUnit.assertTrue(Array.isArray(headers[keyName]));
550+
TKUnit.assertEqual(headers[keyName][0], value1);
551+
TKUnit.assertEqual(headers[keyName][1], value2);
552+
done(null);
553+
}
554+
catch (err) {
555+
done(err);
556+
}
557+
};
558+
538559
export var test_request_contentSentAndReceivedProperly = function (done) {
539560
var result;
540561

http/http-request.android.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,16 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request
5858
}
5959

6060
// read the headers
61-
var headers = {};
61+
var headers: http.Headers = {};
6262
if (result.headers) {
6363
var jHeaders = result.headers;
6464
var length = jHeaders.size();
6565
var i;
6666
var pair: com.tns.Async.Http.KeyValuePair;
6767
for (i = 0; i < length; i++) {
6868
pair = jHeaders.get(i);
69-
headers[pair.key] = pair.value;
69+
70+
(<any>http).addHeader(headers, pair.key, pair.value);
7071
}
7172
}
7273

http/http-request.ios.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,16 @@ export function request(options: http.HttpRequestOptions): Promise<http.HttpResp
6060
if (error) {
6161
reject(new Error(error.localizedDescription));
6262
} else {
63-
var headers = {};
63+
var headers: http.Headers = {};
6464
if (response && response.allHeaderFields) {
6565
var headerFields = response.allHeaderFields;
6666
var keys = headerFields.allKeys;
6767

6868
for (var i = 0, l = keys.count; i < l; i++) {
69-
var key = keys.objectAtIndex(i);
70-
headers[key] = headerFields.valueForKey(key);
69+
let key = keys.objectAtIndex(i);
70+
let value = headerFields.valueForKey(key);
71+
72+
(<any>http).addHeader(headers, key, value);
7173
}
7274
}
7375

http/http.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,15 @@ declare module "http" {
103103
/**
104104
* Gets the response headers.
105105
*/
106-
headers: any;
106+
headers: Headers;
107107

108108
/**
109109
* Gets the response content.
110110
*/
111111
content?: HttpContent;
112112
}
113+
114+
export type Headers = { [key: string]: string | string[] };
113115

114116
/**
115117
* Encapsulates the content of an HttpResponse.

http/http.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import image = require("image-source");
22
import httpRequest = require("http/http-request");
3+
import dts = require("http");
34

45
global.moduleMerge(httpRequest, exports);
56

@@ -52,4 +53,16 @@ export function getFile(arg: any, destinationFilePath?: string): Promise<any> {
5253
}
5354
}, e => reject(e));
5455
});
56+
}
57+
58+
export function addHeader(headers: dts.Headers, key: string, value: string): void{
59+
if(!headers[key]) {
60+
headers[key] = value;
61+
} else if (Array.isArray(headers[key])){
62+
(<string[]>headers[key]).push(value);
63+
} else {
64+
let values: string[] = [<string>headers[key]];
65+
values.push(value);
66+
headers[key] = values;
67+
}
5568
}

0 commit comments

Comments
 (0)