斯威夫特URLSession防止重定向

问题描述 投票:0回答:3

我有身份验证服务器的客户端代码(执行服务器,这样成功,我收到一个重定向URL),并要检查状态代码是否是302或没有。但是该请求被自动重定向和响应是200这样的问题是如何防止自动重定向?

let params = ["username":LoginField.text, "password":PassField.text] as! Dictionary<String, String>

    var request = URLRequest(url: URL(string: NSLocalizedString("url_login", comment: ""))!)
    request.httpMethod = "POST"
    request.httpBody = try? JSONSerialization.data(withJSONObject: params, options: [])
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")

    let session = URLSession.shared
    let task = session.dataTask(with: request, completionHandler: { data, response, error -> Void in
            if let httpResponse = response as? HTTPURLResponse {
                if httpResponse.statusCode == 302 {

                    result=1;

                }else{
                    result=0;
                }
            }
            semaphore.signal() 
    })
swift urlsession
3个回答
0
投票

我认为你必须委托分配给您的URLSession。在重定向,方法URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:将被调用。在这里,你可以做你的检查等。

有关详细信息,请参阅Apple文档Life Cycle of a URL Session


0
投票

指派一名代表为您的控制器或类URLSession,并实现以下功能。源here并确保ULRSession不是背景之一。

extension YourControllerOrClass: NSURLSessionTaskDelegate {
    func URLSession(session: NSURLSession,
    task: NSURLSessionTask,
    willPerformHTTPRedirection response: NSHTTPURLResponse,
    newRequest request: NSURLRequest,
    completionHandler: (NSURLRequest!) -> Void) {
    // Stops the redirection, and returns (internally) the response body.
    completionHandler(nil)
  }
}

0
投票

如果您正在使用Alamofire这将工作

 let delegate = Alamofire.SessionManager.default.delegate

        delegate.taskWillPerformHTTPRedirection = { (session, task, response, request) -> URLRequest? in

            return nil
        }
© www.soinside.com 2019 - 2024. All rights reserved.