域名被封锁问题解决

编程入门 行业动态 更新时间:2024-10-04 11:29:06

<a href=https://www.elefans.com/category/jswz/34/1769285.html style=域名被封锁问题解决"/>

域名被封锁问题解决

域名被拦截(重定向)

移动网络服务运营商或其他网络服务机构,由于某些不知明原因,会禁掉一些域名访问,如果你的域名正好在其中,那恭喜,你的域名访问被其封锁了。你的所有请求就只能呵呵了,此时四十五度角仰望星空。心里有一百万个为什么…但是天无绝人之路,我们可以通过域名重定向去解决。是不是瞬间开心起来了。以下是我的解决方法:

一. 自定义协议类(AFURLProtocol)继承NSURLProtocol
(1)、 实现+ (BOOL)canInitWithRequest:(NSURLRequest *)request方法。此方法可以处理给定的请求,YES是需要处理,NO不需要处理。

+ (BOOL)canInitWithRequest:(NSURLRequest *)request {//防止无限循环if ([NSURLProtocol propertyForKey:URLProtocolHandledKey inRequest:request]) {return NO;}if (![UCDomainManager hasNeedDomainRedirect]) {return NO;}NSString *scheme = [[request URL] scheme];if ([scheme caseInsensitiveCompare:@"http"] == NSOrderedSame || [scheme caseInsensitiveCompare:@"https"] == NSOrderedSame) {if ([request.URL.host isEqualToString:[UCDomainManager currentDomain]]) {return YES;}}return NO;
}

(2)、实现+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b方法。出于缓存目的,请求被认为是等效的当且仅当它们将由相同协议处理且协议在执行后声明它们等效, 实施特定的检查。

+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b {return [super requestIsCacheEquivalent:a toRequest:b];
}

(3)、实现- (instancetype)initWithRequest:(NSURLRequest *)request cachedResponse:(nullable NSCachedURLResponse *)cachedResponse client:(nullable id )client方法。初始化给定的NSURLProtocol请求, 缓存的响应和客户端。

- (instancetype)initWithRequest:(NSURLRequest *)request cachedResponse:(NSCachedURLResponse *)cachedResponse client:(id<NSURLProtocolClient>)client {return [super initWithRequest:request cachedResponse:cachedResponse client:client];
}

(4)、实现+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request方法。拦截request请求进行处理(修改host、添加cookie)

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {NSMutableURLRequest *mutableRequest = [request mutableCopy];mutableRequest = [self redirectHostInRequest:mutableRequest];return [mutableRequest copy];
}
+ (NSMutableURLRequest *)redirectHostInRequest:(NSMutableURLRequest *)request {if (request.URL.host.length == 0) {return request;}NSString *originUrlString = [request.URL absoluteString];NSString *originHostString = [request.URL host];NSRange hostRange = [originUrlString rangeOfString:originHostString];if (hostRange.location == NSNotFound) {return request;}NSString *httpDnsIP = [UCDomainManager getRedirectIP];//替换请求头中url hostNSString *urlString = [originUrlString stringByReplacingCharactersInRange:hostRange withString:httpDnsIP];NSURL *url = [NSURL URLWithString:urlString];request.URL = url;//注意:若包头的host(key-value中的host)本身就是一个IP,则需要将这个IP替换成域名(该域名需要从referer中获取)

更多推荐

域名被封锁问题解决

本文发布于:2024-02-28 13:32:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769899.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:域名

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!