通过使用socket
绑定特定接口,将http请求解析成符合HTTP
协议的字符串,使用socket绑定的接口进行收发,达到无视当前路由,强制通过蜂窝网络
或WiFi
进行HTTP
请求的效果。
主要适用于连接到无法访问网络的WiFi,强制通过蜂窝网络进行HTTP
请求的场景。
NSURLRequest
转换为HTTP协议数据的逻辑可以在NSData+XXSocketReqeust.m
中看到,只提供对HTTP协议的GET
及POST
请求的部分支持。- 不支持
HTTP
协议的缓存功能
@import XXSocketReqeust;
@interface XXViewController ()
@property(strong, nonatomic) XXSocketRequestManager * manager;
@end
@implementation XXViewController
- (void)viewDidLoad {
[super viewDidLoad];
/// 实际使用中,一般使用单例来持有XXSocketRequestManager实例
_manager = [[XXSocketRequestManager alloc] init];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://www.baidu.com"]];
XXSocketDataTask *task = [_manager dataTaskWithRequest:request viaInterface:XXNetworkInterfaceCellular completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
NSLog(@"error is :%@\n response is %@", error, response);
NSLog(@"responseObject: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
}];
[task start];
}
@end
依赖第三方框架AFNetworking
和CocoaAsyncSocket
。另外依赖于nodejs
的http解析框架http-parser,这个框架不提供pod支持,所以以源码的方式进行引用。
XXSocketReqeust is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'XXSocketReqeust'
lixinxing, x@devlxx.com
iOS系统中肯定存在NSURLRequest
转换为HTTP
协议数据的功能,但是未找到这部分的内容,待有时间逆向分析,看能否提供对HTTP
协议的完整支持。
如果您有方案或者思路,欢迎提交issue
XXSocketReqeust is available under the MIT license. See the LICENSE file for more info.