mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00
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:
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
4
http/http.d.ts
vendored
@ -103,13 +103,15 @@ declare module "http" {
|
||||
/**
|
||||
* Gets the response headers.
|
||||
*/
|
||||
headers: any;
|
||||
headers: Headers;
|
||||
|
||||
/**
|
||||
* Gets the response content.
|
||||
*/
|
||||
content?: HttpContent;
|
||||
}
|
||||
|
||||
export type Headers = { [key: string]: string | string[] };
|
||||
|
||||
/**
|
||||
* Encapsulates the content of an HttpResponse.
|
||||
|
13
http/http.ts
13
http/http.ts
@ -1,5 +1,6 @@
|
||||
import image = require("image-source");
|
||||
import httpRequest = require("http/http-request");
|
||||
import dts = require("http");
|
||||
|
||||
global.moduleMerge(httpRequest, exports);
|
||||
|
||||
@ -52,4 +53,16 @@ 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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user