Merge pull request #1707 from NativeScript/http-headers

Allow multiple headers with the same name to be retrieved from a HTTP response
This commit is contained in:
Vladimir Enchev
2016-03-08 13:54:27 +02:00
5 changed files with 45 additions and 6 deletions

View File

@ -535,6 +535,27 @@ export var test_request_headersSentAndReceivedProperly = function (done) {
});
};
export var test_request_headersWithSameKeyAddedProperly = function (done) {
var keyName = "key";
var value1 = "value1";
var value2 = "value2";
var headers = {};
(<any>http).addHeader(headers, keyName, value1);
(<any>http).addHeader(headers, keyName, value2);
try {
TKUnit.assertTrue(Array.isArray(headers[keyName]));
TKUnit.assertEqual(headers[keyName][0], value1);
TKUnit.assertEqual(headers[keyName][1], value2);
done(null);
}
catch (err) {
done(err);
}
};
export var test_request_contentSentAndReceivedProperly = function (done) {
var result;

View File

@ -58,7 +58,7 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request
}
// read the headers
var headers = {};
var headers: http.Headers = {};
if (result.headers) {
var jHeaders = result.headers;
var length = jHeaders.size();
@ -66,7 +66,8 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request
var pair: com.tns.Async.Http.KeyValuePair;
for (i = 0; i < length; i++) {
pair = jHeaders.get(i);
headers[pair.key] = pair.value;
(<any>http).addHeader(headers, pair.key, pair.value);
}
}

View File

@ -60,14 +60,16 @@ export function request(options: http.HttpRequestOptions): Promise<http.HttpResp
if (error) {
reject(new Error(error.localizedDescription));
} else {
var headers = {};
var headers: http.Headers = {};
if (response && response.allHeaderFields) {
var headerFields = response.allHeaderFields;
var keys = headerFields.allKeys;
for (var i = 0, l = keys.count; i < l; i++) {
var key = keys.objectAtIndex(i);
headers[key] = headerFields.valueForKey(key);
let key = keys.objectAtIndex(i);
let value = headerFields.valueForKey(key);
(<any>http).addHeader(headers, key, value);
}
}

4
http/http.d.ts vendored
View File

@ -103,7 +103,7 @@ declare module "http" {
/**
* Gets the response headers.
*/
headers: any;
headers: Headers;
/**
* Gets the response content.
@ -111,6 +111,8 @@ declare module "http" {
content?: HttpContent;
}
export type Headers = { [key: string]: string | string[] };
/**
* Encapsulates the content of an HttpResponse.
*/

View File

@ -1,5 +1,6 @@
import image = require("image-source");
import httpRequest = require("http/http-request");
import dts = require("http");
global.moduleMerge(httpRequest, exports);
@ -53,3 +54,15 @@ export function getFile(arg: any, destinationFilePath?: string): Promise<any> {
}, e => reject(e));
});
}
export function addHeader(headers: dts.Headers, key: string, value: string): void{
if(!headers[key]) {
headers[key] = value;
} else if (Array.isArray(headers[key])){
(<string[]>headers[key]).push(value);
} else {
let values: string[] = [<string>headers[key]];
values.push(value);
headers[key] = values;
}
}