mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
add HttpRequestOptions.dontFollowRedirects (#3473)
This implements the option to have http.request() not follow server's 3xx redirection replies but instead return the exact redirection code and headers. * on iOS, it uses a different NSURLSession instance for non-following request, with a NSURLSessionTaskDelegate implementing URLSessinTaskWillPerformHTTPRedirection... * on Android, it just passes the option on to org.nativescript.widgets.Async.Http; so this requires the respective commit in tns-core-modules-widgets to work
This commit is contained in:
committed by
Vladimir Enchev
parent
4f3f09e9ae
commit
ee4b790728
@@ -20,7 +20,28 @@ var USER_AGENT_HEADER = "User-Agent";
|
||||
var USER_AGENT = `Mozilla/5.0 (i${device}; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25`;
|
||||
var sessionConfig = getter(NSURLSessionConfiguration, NSURLSessionConfiguration.defaultSessionConfiguration);
|
||||
var queue = getter(NSOperationQueue, NSOperationQueue.mainQueue);
|
||||
var session = NSURLSession.sessionWithConfigurationDelegateDelegateQueue(sessionConfig, null, queue);
|
||||
|
||||
class NSURLSessionTaskDelegateImpl extends NSObject implements NSURLSessionTaskDelegate {
|
||||
public static ObjCProtocols = [NSURLSessionTaskDelegate];
|
||||
public URLSessionTaskWillPerformHTTPRedirectionNewRequestCompletionHandler(session: NSURLSession, task: NSURLSessionTask, response: NSHTTPURLResponse, request: NSURLRequest, completionHandler: (p1: NSURLRequest) => void): void {
|
||||
completionHandler(null);
|
||||
}
|
||||
}
|
||||
var sessionTaskDelegateInstance: NSURLSessionTaskDelegateImpl = <NSURLSessionTaskDelegateImpl>NSURLSessionTaskDelegateImpl.new();
|
||||
|
||||
var defaultSession;
|
||||
function ensureDefaultSession() {
|
||||
if (!defaultSession) {
|
||||
defaultSession = NSURLSession.sessionWithConfigurationDelegateDelegateQueue(sessionConfig, null, queue);
|
||||
}
|
||||
}
|
||||
|
||||
var sessionNotFollowingRedirects;
|
||||
function ensureSessionNotFollowingRedirects() {
|
||||
if (!sessionNotFollowingRedirects) {
|
||||
sessionNotFollowingRedirects = NSURLSession.sessionWithConfigurationDelegateDelegateQueue(sessionConfig, sessionTaskDelegateInstance, queue);
|
||||
}
|
||||
}
|
||||
|
||||
var imageSource: typeof imageSourceModule;
|
||||
function ensureImageSource() {
|
||||
@@ -57,6 +78,15 @@ export function request(options: http.HttpRequestOptions): Promise<http.HttpResp
|
||||
urlRequest.timeoutInterval = options.timeout / 1000;
|
||||
}
|
||||
|
||||
var session;
|
||||
if (types.isBoolean(options.dontFollowRedirects) && options.dontFollowRedirects) {
|
||||
ensureSessionNotFollowingRedirects();
|
||||
session = sessionNotFollowingRedirects;
|
||||
} else {
|
||||
ensureDefaultSession();
|
||||
session = defaultSession;
|
||||
}
|
||||
|
||||
var dataTask = session.dataTaskWithRequestCompletionHandler(urlRequest,
|
||||
function (data: NSData, response: NSHTTPURLResponse, error: NSError) {
|
||||
if (error) {
|
||||
|
||||
Reference in New Issue
Block a user