【发布时间】:2015-02-13 12:31:02
【问题描述】:
这是canInitWithRequest 中的NSURLProtocol:
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
// only handle http requests we haven't marked with our header.
if ([[[request URL] scheme] isEqualToString:@"http"] &&
([request valueForHTTPHeaderField:RNCachingURLHeader] == nil)) {
return YES;
}
return NO;
}
但我希望 NSURLProtocol 也允许 https 请求。
我试过了,但是调用时所有请求都失败了:
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
// only handle http requests we haven't marked with our header.
if (([[[request URL] scheme] isEqualToString:@"http"] || [[[request URL] scheme] isEqualToString:@"https"]) &&
([request valueForHTTPHeaderField:RNCachingURLHeader] == nil)) {
return YES;
}
return NO;
}
一个示例是具有 https 方案的登录请求。在上面的函数中,返回 YES 但是当登录请求被调用时,我在日志中得到这个错误:
Error Domain=NSURLErrorDomain Code=-1004 "无法连接到服务器。"
但是,如果我在 canInitWithRequest 中删除对 https 的检查,则不会出现错误。
我正在使用RNCachingURLProtocol 来缓存请求。
我怎样才能做到这一点。
【问题讨论】:
-
检查您在
if中的哪一项测试是错误的。我尝试了您的代码,它通过了isEqualToString:测试,但我没有要测试的RNCachingURLHeader值。 -
@Larne : RNCachingURLHeader = @"X-RNCache"
-
我无法重现您的问题。我试过了,但是 https 请求在您的
canInitWithRequest:中与 http 请求具有相同的行为。在canInitWithRequest::日志[[request URL] scheme]和[request valueForHTTPHeaderField:RNCachingURLHeader]。另外,检查是否存在区分大小写的问题(您与lowercase和scheme进行比较)。
标签: ios objective-c nsurlprotocol