• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

objective-c - 没有调用 didReceiveAuthenticationChallenge

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:49:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 UIWebView 去一个有登录按钮的网站。按下登录按钮后(例如在 Safari 中),它会提示登录,然后调用通过 AD 进行身份验证的 Web 服务并将用户登录。我试图让它在我的 UIWebView,但 didReceiveAuthenticationChallenge 永远不会被调用。有什么想法吗?

- (BOOL)webViewUIWebView *)webView shouldStartLoadWithRequestNSURLRequest *)request navigationTypeUIWebViewNavigationType)navigationType;
{
    NSLog(@"Authed = %d", _authed);

    NSLog(@"Did start loading: %@ auth:%d", [[request URL] absoluteString], _authed);

    NSString *theURL = [[request URL] absoluteString];



    currentURL = [[request URL] absoluteString];

    if (!_authed) {
        _authed = NO;

        [[NSURLConnection alloc] initWithRequest:request delegate:self];
        NSLog(@"shouldStartLoadWithRequest Return NO");
        return NO;
    }

    NSLog(@"shouldStartLoadWithRequest Return YES");
    return YES;
}

- (void)connectionNSURLConnection *)connection didReceiveAuthenticationChallengeNSURLAuthenticationChallenge *)challenge;
{
    NSLog(@"got auth challange");

    NSLog(@"previousFailureCount = %d", [challenge previousFailureCount]);




    ch = challenge;


    [[challenge sender] useCredential:[NSURLCredential credentialWithUser"myusername" password"mypassword" persistence:NSURLCredentialPersistencePermanent] forAuthenticationChallenge:challenge];

}

- (void)connectionNSURLConnection *)connection didReceiveResponseNSURLResponse *)response;
{
    NSLog(@"received response via nsurlconnection");

    _authed = YES;


    NSString *urladdress = currentURL;    
    NSURL *url = [NSURL URLWithString:urladdress];


    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

    [itemWebView loadRequest:urlRequest];
}

- (BOOL)connectionShouldUseCredentialStorageNSURLConnection *)connection;
{
    return NO;
}

有没有办法手动调用 didReceiveAuthenticationChallenge 方法?



Best Answer-推荐答案


正如其他人所指出的,为什么您没有触发该方法的最可能的解释是服务器没有返回 HTTP 401 Unauthorized。 .只有这样 UIWebView 才会发送它的委托(delegate) didReceiveAuthenticationChallenge 消息。

特别是因为您将成功案例描述为“ntfs 登录屏幕”——我假设您的意思是 Windows 域登录对话框——这不是 HTTP 的一部分,听起来服务器使它看起来像一个登录屏幕,但不是 HTTP 身份验证。

要考虑/尝试的事情:

  • 尝试使用 cURL 访问 URL并确认您确实收到了 401。

  • 如果您没有收到 401,那么您在桌面浏览器上看到的对话框要么是 Javascript 提示符,要么是构造成看起来像的 HTML 表单。尝试使用 Firebug 或 Chrome 的检查器之类的工具来确定真实凭据发布到哪个 URL,并在那里启动您的 UIWebView。

  • 如果您 实际上得到了 401,那么也许要仔细检查您的代理连接?在这种情况下,应该在 View 的委托(delegate)上调用此方法。

最后:你问是否可以手动触发 didReceiveAuthenticationChallenge:当然你可以将消息发送给你的委托(delegate),并包含一个挑战,但这根本不是你想要的:那是 挑战委托(delegate),而不是服务器通过您的 UIWebView 来挑战。

关于objective-c - 没有调用 didReceiveAuthenticationChallenge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626881/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap