- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 UIWebView
去一个有登录按钮的网站。按下登录按钮后(例如在 Safari 中),它会提示登录,然后调用通过 AD 进行身份验证的 Web 服务并让用户登录。我试图让它在我的 UIWebView< 中工作
,但永远不会调用 didReceiveAuthenticationChallenge
。有什么想法吗?
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)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)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)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)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)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)connectionShouldUseCredentialStorage:(NSURLConnection *)connection;
{
return NO;
}
有没有办法手动调用didReceiveAuthenticationChallenge
方法?
最佳答案
正如其他人所指出的,对于为什么您没有触发该方法的最可能的解释是服务器没有返回 HTTP 401 Unauthorized
。 .只有这样,UIWebView 才会向其委托(delegate)发送 didReceiveAuthenticationChallenge
消息。
特别是因为您将成功的案例描述为“ntfs 登录屏幕”——我假设您指的是 Windows 域登录对话框——它不是 HTTP 的一部分,听起来服务器让它看起来像登录屏幕,但它不是 HTTP 身份验证。
需要考虑/尝试的事情:
尝试使用 cURL 访问 URL并确认您确实收到了 401。
如果您没有收到 401,那么您在桌面浏览器上看到的对话框要么是一个 Javascript 提示,要么是一个看起来像 Javascript 的 HTML 表单。尝试使用 Firebug 或 Chrome 的检查器等工具来确定将真实凭据发布到哪个 URL,并在那里启动你的 UIWebView。
如果您实际上得到了 401,那么也许仔细检查您的委托(delegate)连接?在这种情况下,应在 View 的委托(delegate)上调用此方法。
最后:您询问是否可以手动触发 didReceiveAuthenticationChallenge
:当然您可以将消息发送给您的代表,并包含一个质询,但这根本不是您想要的:这就是 您挑战委托(delegate),而不是服务器通过您的 UIWebView 来挑战。
关于objective-c - didReceiveAuthenticationChallenge 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10626881/
我正在使用 webview 加载网站。我设法运行了这些应用程序。但我的问题是,如果我传递了错误的密码,我将无法加载网站,它只会显示白屏。 如果我传递正确的用户名/密码,它将加载该网站。有没有办法处理我
如果网站不需要身份验证,我的代码可以正常工作,如果需要,则在打印“已创建凭据”后会立即出现 EXC_BAD_ACCESS 错误。我不会发布任何内容,并且此代码是直接从文档中复制的 - 知道出了什么问题
我有一个 UIWebView 去一个有登录按钮的网站。按下登录按钮后(例如在 Safari 中),它会提示登录,然后调用通过 AD 进行身份验证的 Web 服务并让用户登录。我试图让它在我的 UIWe
我正在使用 NSURLConnection 连接到服务器。服务器要求我使用委托(delegate)方法进行基本身份验证:-didReceiveAuthenticationChallenge。但这只会被
我按下按钮调用波纹管按钮 Action 函数 - (IBAction)buttonAction:(UIButton *)sender { NSURL *URL = [NSURL URLWith
我正在使用 Certificate and Public Key Pinning 的 OWASP 示例.该示例使用 random.org , 和 random.org最近拿到了新证书。这意味着 con
我正在使用 NSURLConnection 的 sendSynchronousRequest 与服务器通信。我想处理可以使用连接委托(delegate)实现的身份验证,但不会为同步请求调用委托(del
我正在使用 WKWebview (iOS 9) 加载 https://self-signed.badssl.com/ 当委托(delegate) didReceiveAuthenticationCha
我们的应用程序通过 HTTPS 与服务器通信。我们想要在客户端重新验证 SSL 证书字段。例如我想在 HTTPS 连接期间验证服务器颁发的 SSL 证书的 CN 字段。有没有办法检索 didRecei
我一直很高兴地使用 WKWebView 来处理 iOS 8.x 中的 Instagram OAuth 隐式流程。但是,在 iOS 9 中,我的 WKWebView navigationDelegate
有什么办法可以抑制这种隐式身份验证对话吗? 我在调用 didRecieveAuthenticationChallenge 函数之前收到此对话。我无法理解的是,如果我自己处理身份验证,为什么会出现此对话
我是 iOS 开发新手。我有一个项目,我必须使用 WKWebView 而不是 UIWebView。它是一个简单的网页,带有 javascript 到 Objective-C 和其他集成方式。它工作正常
我正在尝试从安全的 restful 服务中获取数据。我关注许多其他帖子以及 How to use NSURLConnection to connect with SSL for an untruste
我在 iOS 编程中遇到一些身份验证问题。我有一个代码可以完美地针对 Windows 2003 上的 IIS6,但不适用于带有 IIS7 的 Windows Server 2008。两台服务器上的安全
func webView(webView: WKWebView, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationCha
我有一个受摘要保护的 REST API。我想下载我的 JSON 响应,但首先我必须针对其余 api 进行身份验证。 我正在使用 sendAsynchronousRequest:queue:comple
我设置了一个简单的 NSURLConnection 来查询 http 服务器。 GET /path HTTP/1.1 Host: 192.168.1.161:8282 User-Agent: NetT
我需要使用 NSURLConnection 类处理 http 身份验证 (401),因此我实现了“connection:didReceiveAuthenticationChallenge:”委托(de
我是一名优秀的程序员,十分优秀!