【问题标题】:UIWebView windows authentication in swift programming快速编程中的 UIWebView windows 身份验证
【发布时间】:2016-05-06 13:59:32
【问题描述】:

我的 UIWebView 有问题。我无法使用 Windows 身份验证打开网站...在 Safari 浏览器中出现一个弹出窗口,因此在 WebView 控件中什么也没发生。

有人可以帮我解决这个问题吗?

这是我的代码

class MainViewController: UIViewController, UIWebViewDelegate, MFMailComposeViewControllerDelegate {

    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad();

        webView.delegate = self;

        let url = NSURL (string: "http://test.raphaels.com/mobile/");
        let requestObj = NSURLRequest(URL: url);
        webView.loadRequest(requestObj);
    }
}

这段代码在 iOS 模拟器(即 Xcode 上的 iPhone 模拟器/模拟器)上的非安全服务器(URL)上运行良好。但是当我使用上面的网址时(只能从内网访问)。它在浏览器中询问用户名/密码并在 iPhone 模拟器中停止。请帮助我,我如何提供用户名和密码。我在网上搜索并找到了很多示例,不幸的是没有一个是 swift 编程的。

我试图写一个失败的解决方案,所以下面是失败的代码

override func viewDidLoad() {
    super.viewDidLoad();

    webView.delegate = self;


    let username = "username11";
    let password = "password22";
    let loginString = NSString(format: "%@:%@", username, password);
    let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)!;
    let base64LoginString = loginData.base64EncodedStringWithOptions(nil);

    // create the request
    let url = NSURL (string: "http://test.raphaels.com/mobile/");
    let request = NSMutableURLRequest(URL: url)
    request.HTTPMethod = "POST"
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")




    webView.loadRequest(request);
}

【问题讨论】:

  • 您的意思是让网址中有两个 http 吗?此外,NSURL(string:_) 返回一个可选的 NSURL,您可能必须在使用它来生成 NSMutableURLRequest 之前将其解包。
  • 两个 https ?它只是一个网址。你以前见过吗,当你浏览一些安全的 URL 时,会有一个用户名/密码 javascript 类型的警报,如果没有填写或填写不正确,则访问被拒绝并显示 401 错误代码。
  • 当然。但是,我从未见过包含两个“http://”子字符串的 url。你的 let url = NSURL(string: "http://"+"http://...") //抱歉 stackoverflow 一直在对看起来像 url 的东西进行一些格式化
  • 我怎样才能打开包装?我是 swift 的新手,iOS 都是。我用 Java 编写了一个应用程序,并使用现有的代码库指向我的 Web 应用程序。
  • 哦,您的编译器是否警告您“可选类型 'NSURL 的值?'没有打开;你是不是要使用“!”或者 '?' " 在 NSMutableURLRequest 行上?

标签: ios swift uiwebview


【解决方案1】:

它起作用了 :-) 使用下面的代码。

override func viewDidLoad() {
        super.viewDidLoad();

        webView.delegate = self;

        let urlComponents = NSURLComponents(string: "http://test.raphaels.com/mobile/");
        urlComponents.user = "username11";
        urlComponents.password = "password22";

        let url = urlComponents.URL;

        let requestObj = NSURLRequest(URL: url!);
        webView.loadRequest(requestObj);
    }

【讨论】:

    【解决方案2】:

    Objective C 版本

    NSURLComponents *urlComponents = [NSURLComponents componentsWithString:@"http://test.raphaels.com/mobile/"];
    
    [urlComponents setUser:@"username11"];
    [urlComponents setPassword:@"password22"];
    
    NSURL *url = [urlComponents URL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [webView loadRequest:requestObj];
    

    【讨论】:

      【解决方案3】:

      一个快速简单的解决方案是:使用 URL as

      http://username:password@test.raphaels.com/mobile/
      

      不需要任何特殊代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-30
        • 1970-01-01
        • 1970-01-01
        • 2012-02-14
        • 2020-07-14
        • 2010-10-05
        • 2013-10-30
        • 1970-01-01
        相关资源
        最近更新 更多