Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift NSURLSession不遵循重定向_Swift_Nsurlsession - Fatal编程技术网

Swift NSURLSession不遵循重定向

Swift NSURLSession不遵循重定向,swift,nsurlsession,Swift,Nsurlsession,对于屏幕抓取项目,我使用Swift中的NSURLSession来阅读HTML页面。但是启动已经失败了,因为返回的页面会重定向到一个新的网页,而我的代码没有遵循这一点。我认为如果没有为会话设置委托,重定向在默认情况下可以工作。但这两种情况都不能改变方向。以下是我的测试项目: import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate, NSURLSessionTaskDelegate {

对于屏幕抓取项目,我使用Swift中的NSURLSession来阅读HTML页面。但是启动已经失败了,因为返回的页面会重定向到一个新的网页,而我的代码没有遵循这一点。我认为如果没有为会话设置委托,重定向在默认情况下可以工作。但这两种情况都不能改变方向。以下是我的测试项目:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, NSURLSessionTaskDelegate {

  @IBOutlet weak var window: NSWindow!

  func URLSession(session: NSURLSession, task: NSURLSessionTask, willPerformHTTPRedirection response: NSHTTPURLResponse,
    newRequest request: NSURLRequest, completionHandler: (NSURLRequest!) -> Void) {
    completionHandler(request);
  }

  func applicationDidFinishLaunching(aNotification: NSNotification) {
    var url = NSURL(string: "https://banking.dkb.de");

    let defaultConfigObject = NSURLSessionConfiguration.defaultSessionConfiguration();
    let session = NSURLSession(configuration: defaultConfigObject, delegate: self, delegateQueue: nil);

    let task = session.dataTaskWithURL(url!, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in

      let text = NSString(data: data, encoding: NSUTF8StringEncoding);
      // text contains here: <head><meta HTTP-EQUIV="REFRESH" content="0; url=/dkb/"></head>
      if var document = NSXMLDocument(data: data, options: Int(NSXMLDocumentTidyHTML), error: nil) {
        if let forms = document.nodesForXPath("//form[@name='login']", error: nil) where forms.count > 0 {
          let form = forms[0] as! NSXMLNode;

        }
      }
    });

    task.resume();

  }

  func applicationWillTerminate(aNotification: NSNotification) {
    // Insert code here to tear down your application
  }


}
导入可可粉
@非应用程序主
类AppDelegate:NSObject、NSApplicationDelegate、NSURLSessionTaskDelegate{
@IBVAR窗口:NSWindow!
func URLSession(会话:NSURLSession,任务:NSURLSessionTask,willPerformHTTPRedirection响应:NSHTTPURLResponse,
newRequest请求:NSURLRequest,completionHandler:(NSURLRequest!)->Void){
completionHandler(请求);
}
func ApplicationIDFinishLaunching(通知:NSNotification){
var url=NSURL(字符串:”https://banking.dkb.de");
让defaultConfigObject=NSURLSessionConfiguration.defaultSessionConfiguration();
let session=NSURLSession(配置:defaultConfigObject,委托:self,委托队列:nil);
让task=session.dataTaskWithURL(url!,completionHandler:{(数据:NSData!,响应:NSURLResponse!,错误:NSError!)->在中无效
让text=NSString(数据:数据,编码:NSUTF8StringEncoding);
//文本包含以下内容:
如果var document=NSXMLDocument(数据:data,选项:Int(NSXMLDocumentTidyHTML),错误:nil){
如果let forms=document.nodesForXPath(“//form[@name='login']”,错误:nil),其中forms.count>0{
设form=forms[0]为!NSXMLNode;
}
}
});
task.resume();
}
func应用程序将终止(通知:NSNotification){
//在此处插入代码以删除应用程序
}
}
我必须做什么才能使重定向在这里工作

更新:


经过进一步调查,我发现这一定与服务器的结果有关。例如使用
https://www.google.com
确实会触发重定向委托。但是,由于任何浏览器都可以处理来自银行地址的重定向,因此必须有一种不同的方法来正确处理这一问题,我想了解如何处理。NSURLSession支持302重定向并使用它


另一方面,如前所述使用元标记。它返回200(OK)作为状态码,所以您必须通过读取meta标记来处理它。

我希望,这会有所帮助-您已经阅读过了。通过元标记重定向根本不是这样处理的。