【问题标题】:Why do i get authenticationchallenge with NSURLRequest when switching to HTTPS?为什么我在切换到 HTTPS 时会遇到 NSURLRequest 的身份验证挑战?
【发布时间】:2017-04-06 00:37:20
【问题描述】:

我已经使用 NSMutableURLRequest 连接服务器很长时间了。

为了避免双路旅行,我立即在标题中设置了 usr/pwd,如下所示:

NSMutableURLRequest *request = [NSMutableURLRequest
            requestWithURL:[NSURL URLWithString:url]
               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:HTTP_REQUEST_TIMEOUT];
NSString *authStr = [NSString stringWithFormat:@"%@:%@", inUsr, inPwd];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [[authStr dataUsingEncoding:NSISOLatin1StringEncoding] base64EncodedStringWithOptions:0]];

[request setValue:authValue forHTTPHeaderField:@"Authorization"];

这很好,除非出现错误,否则永远不会调用“willSendRequestForAuthenticationChallenge”,因此该方法一直看起来像:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {        
    NSDictionary *errorInfo = ((NSHTTPURLResponse *) challenge.failureResponse).allHeaderFields;

    NSError *error; = [NSError errorWithDomain:@"httprequesthandler" code:WRONG_CREDENTIALS userInfo:errorInfo];
    [delegate finishedWithErrors:error];

然而,现在我使用的是和往常一样的 URL,只是“https”而不是“http”,而且突然每次都会调用这个方法。

我希望我的请求能够正常工作,即填充基本标头并且只向服务器发出一个请求。

我不确定我缺少什么,因此非常感谢您的指点!

【问题讨论】:

    标签: ios objective-c https nsurlconnection


    【解决方案1】:

    使用https 作为您的方案(或协议)请求安全地建立连接,既可以加密传输的数据,也可以向您提供一些有关您连接的服务器真实性的信息。

    这里调用的委托方法(connection:willSendRequestForAuthenticationChallenge:),与您向服务器验证自己无关,而是服务器向您验证自己。如果您深入研究挑战对象 (NSURLAuthenticationChallenge),您可以找到服务器提供的凭据,让您知道它是您实际尝试连接的服务器,而不是冒名顶替者。

    通常您不需要使用此方法,除非您想以超出操作系统已经完成的方式来验证服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2012-10-14
      相关资源
      最近更新 更多