gpt4 book ai didi

ios - NSURLProtocol - 处理 https 请求

转载 作者:行者123 更新时间:2023-11-29 12:28:01 31 4
gpt4 key购买 nike

这是NSURLProtocol中的canInitWithRequest:

+ (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缓存请求。
我怎样才能做到这一点。

最佳答案

只是为了测试和理解重构你的代码:

+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
NSString *scheme = [[[request URL] scheme] lowercaseString];
BOOL supportedScheme = [scheme isEqualToString:@"http"] || [scheme isEqualToString:@"https"];

NSString *header = [request valueForHTTPHeaderField:RNCachingURLHeader];
BOOL validHeader = header == nil;

BOOL canInit = supportedScheme && validHeader;

return canInit;
}

注意 lowercaseString,这是防御性编码。

关于ios - NSURLProtocol - 处理 https 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499690/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com