为什么我在切换到 HTTPS 时会收到 NSURLRequest 的身份验证挑战?
Why do i get authenticationchallenge with NSURLRequest when switching to HTTPS?
我已经使用 NSMutableURLRequest 很长时间来连接到我的服务器。
为了避免重复行程,我直接在header中设置了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",突然间每次都会调用此方法。
我希望我的请求按正常方式工作,即填充基本 header 并且只向服务器发出一个请求。
我不确定我遗漏了什么,所以非常感谢您的指点!
使用 https
作为您的方案(或协议)请求安全地建立连接,通过加密传输的数据以及向您提供一些有关您正在连接的服务器的真实性的信息到.
此处调用的委托方法(connection:willSendRequestForAuthenticationChallenge:
)与您向服务器验证自己无关,但服务器向您验证自己。如果你深入研究挑战对象 (NSURLAuthenticationChallenge
),你可以找到服务器提供的凭据,让你知道它是你实际尝试连接的服务器,而不是冒名顶替者。
通常您不需要使用此方法,除非您想以超出 OS 已经执行的方式验证服务器。
我已经使用 NSMutableURLRequest 很长时间来连接到我的服务器。
为了避免重复行程,我直接在header中设置了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",突然间每次都会调用此方法。
我希望我的请求按正常方式工作,即填充基本 header 并且只向服务器发出一个请求。
我不确定我遗漏了什么,所以非常感谢您的指点!
使用 https
作为您的方案(或协议)请求安全地建立连接,通过加密传输的数据以及向您提供一些有关您正在连接的服务器的真实性的信息到.
此处调用的委托方法(connection:willSendRequestForAuthenticationChallenge:
)与您向服务器验证自己无关,但服务器向您验证自己。如果你深入研究挑战对象 (NSURLAuthenticationChallenge
),你可以找到服务器提供的凭据,让你知道它是你实际尝试连接的服务器,而不是冒名顶替者。
通常您不需要使用此方法,除非您想以超出 OS 已经执行的方式验证服务器。