mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +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) {
|
export var test_request_contentSentAndReceivedProperly = function (done) {
|
||||||
var result;
|
var result;
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ function onRequestComplete(requestId: number, result: com.tns.Async.Http.Request
|
|||||||
}
|
}
|
||||||
|
|
||||||
// read the headers
|
// read the headers
|
||||||
var headers = {};
|
var headers: http.Headers = {};
|
||||||
if (result.headers) {
|
if (result.headers) {
|
||||||
var jHeaders = result.headers;
|
var jHeaders = result.headers;
|
||||||
var length = jHeaders.size();
|
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;
|
var pair: com.tns.Async.Http.KeyValuePair;
|
||||||
for (i = 0; i < length; i++) {
|
for (i = 0; i < length; i++) {
|
||||||
pair = jHeaders.get(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) {
|
if (error) {
|
||||||
reject(new Error(error.localizedDescription));
|
reject(new Error(error.localizedDescription));
|
||||||
} else {
|
} else {
|
||||||
var headers = {};
|
var headers: http.Headers = {};
|
||||||
if (response && response.allHeaderFields) {
|
if (response && response.allHeaderFields) {
|
||||||
var headerFields = response.allHeaderFields;
|
var headerFields = response.allHeaderFields;
|
||||||
var keys = headerFields.allKeys;
|
var keys = headerFields.allKeys;
|
||||||
|
|
||||||
for (var i = 0, l = keys.count; i < l; i++) {
|
for (var i = 0, l = keys.count; i < l; i++) {
|
||||||
var key = keys.objectAtIndex(i);
|
let key = keys.objectAtIndex(i);
|
||||||
headers[key] = headerFields.valueForKey(key);
|
let value = headerFields.valueForKey(key);
|
||||||
|
|
||||||
|
(<any>http).addHeader(headers, key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
http/http.d.ts
vendored
4
http/http.d.ts
vendored
@ -103,7 +103,7 @@ declare module "http" {
|
|||||||
/**
|
/**
|
||||||
* Gets the response headers.
|
* Gets the response headers.
|
||||||
*/
|
*/
|
||||||
headers: any;
|
headers: Headers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the response content.
|
* Gets the response content.
|
||||||
@ -111,6 +111,8 @@ declare module "http" {
|
|||||||
content?: HttpContent;
|
content?: HttpContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type Headers = { [key: string]: string | string[] };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulates the content of an HttpResponse.
|
* Encapsulates the content of an HttpResponse.
|
||||||
*/
|
*/
|
||||||
|
13
http/http.ts
13
http/http.ts
@ -1,5 +1,6 @@
|
|||||||
import image = require("image-source");
|
import image = require("image-source");
|
||||||
import httpRequest = require("http/http-request");
|
import httpRequest = require("http/http-request");
|
||||||
|
import dts = require("http");
|
||||||
|
|
||||||
global.moduleMerge(httpRequest, exports);
|
global.moduleMerge(httpRequest, exports);
|
||||||
|
|
||||||
@ -53,3 +54,15 @@ export function getFile(arg: any, destinationFilePath?: string): Promise<any> {
|
|||||||
}, e => reject(e));
|
}, 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