iOS UIWebview添加请求头的两种方式
1、在UIWebviewDelegate的方法中拦截request,设置request的请求头,废话不多说看代码:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *urlString = [[request URL] absoluteString];
NSLog(@"==> %@",urlString);
NSMutableURLRequest *mutableRequest = [request mutableCopy];
NSDictionary *requestHeaders = request.allHTTPHeaderFields;
// 判断请求头是否已包含,如果不判断该字段会导致webview加载时死循环
if (requestHeaders[@"token"] && requestHeaders[@"clienttype"]) {
return YES;
} else {
[mutableRequest setValue:@"token" forHTTPHeaderField:@"token"];
[mutableRequest setValue:@"ios" forHTTPHeaderField:@"clienttype"];
request = [mutableRequest copy];
[webView loadRequest:request];
return NO;
}
return YES;
}
经过本人亲测,这样做有一定问题,当在webview执行goBack方法时导致两个界面相互加载的情况,导致死循环加载无法返回,解决方法请参考以下更牛逼的方法2
2、写一个类继承NSURLProtocol,在 + (BOOL)canInitWithRequest:(NSURLRequest *)request 方法拦截request为request添加请求头,这样所有的webview操作请求都会调到这里,为request添加请求头,而且不影响webview的goBack方法返回
#import <Foundation/Foundation.h>
@interface KJURLProtocol : NSURLProtocol
@end
#import "KJURLProtocol.h"
@implementation KJURLProtocol
+ (void)load {
[NSURLProtocol registerClass:self];
}
+ (BOOL)canInitWithRequest:(NSURLRequest *)request {
if ([request isKindOfClass:[NSMutableURLRequest class]]) {
[(id)request setValue:@"ios" forHTTPHeaderField:@"clienttype"];
[(id)request setValue:[KJAppData instance].token forHTTPHeaderField:@"token"];
}
return NO;
}
@end
/********************************************************************************/
+ (BOOL)canInitWithRequest:(NSURLRequest *)request //在此方法决定是否拦截请求,return yes为拦截
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request //在此方法修改请求并返回
- (void)startLoading //执行特定的request请求
- (void)stopLoading //中断特定的request请求
/********************************************************************************/
附:iOS8一会苹果推出一个加载网页视图更吊的框架WebKit,其中的WKWebView 基本包含了UIWebview的所有东西,据说在性能方面优化的不是一点点,并添加了很多主流的东西,例如:实现网页之间的侧滑返回,估算网页的加载进度,如果你的应用已经最低支持iOS8,你还在由于什么,赶快尝试吧。
详解参考:http://www.tuicool.com/articles/FJ3Ave7
wkwebview问题: http://www.cnblogs.com/NSong/p/6489802.html
NSURLProtocol监听 wkwebview请求 解决办法:http://www.tuicool.com/articles/J7ZRF3i
iOS UIWebview添加请求头的两种方式的更多相关文章
- jmeter请求参数的两种方式
Jmeter做接口测试,Body与Parameters的选取 1.普通的post请求和上传接口,选择Parameters. 2.json和xml请求接口,选择Body. 注意: 在做接口测试时注意下请 ...
- Android请求服务器的两种方式--post, get的区别
android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...
- Ajax请求数据的两种方式
ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...
- 不停mysql服务添加从库的两种方式
现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...
- iOS:创建单例对象的两种方式
单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClas ...
- Ajax设置自定义请求头的两种方法
用自定义请求头token为例 方法一 $.ajax({ type: "post", url:"http://127.0.0.1:4564/bsky-app/templat ...
- struts2 添加请求后缀的3种方式
第一种方式在struts.xml文件中添加 <constant name="struts.action.extension" value="">&l ...
- ios中@class和 #import,两种方式的讨论
转自:http://blog.sina.com.cn/s/blog_a843a8850101b6a7.html 很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在 ...
- IOS 跳转至AppStore的两种方式
//第一种方法 直接跳转 id+编号 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps: ...
随机推荐
- OS | 死锁
死锁的四个条件 互斥 占用等待 非剥夺 循环等待 死锁的解决方案 死锁预防 间接预防:防止前三个条件中的任何一个的发生 直接预防:防止循环等待的发生 死锁避免 进程启动拒绝:不启动任何一个可能发生死锁 ...
- JDBC-oracle(登陆)
题目: 第一步:创建用户表,并插入数据(插入后记得commit) create table users ( name ), password ) ); '); '); 第二步:编写登陆界面(index ...
- java 相关软件使用趋势
http://www.baeldung.com/java-in-2017 https://mp.weixin.qq.com/s?__biz=MzI4NjYwMjcxOQ==&mid=224 ...
- static再次深入理解
在java中,栈中存放的是用来保存方法运行时状态的栈帧,存储了局部变量表,操作数栈等,而方法区存放的是已加载的类的基本信息.常量.静态变量等.
- PROFILE - 库存:物料状态支持 控制【物料状态定义】禁止的事务处理
PROFILE 库存:物料状态支持
- 前端模板adminlte
adminlet是一个前端模板,包含各种各样的功能,自己的网站可以根据需要进行修改:可以免费使用,也有收费增强版,界面如下: 参考: 1.https://adminlte.io/ 2.https:// ...
- 用CHttpFile实现简单的GET/POST数据【转】
一.GET 数据,下载网页,文件等,用于可下载的文件,不能用于服务端运行的程序,比如.aspx文件等,否则会返回500错误. CString strSentence, strWriteName=&qu ...
- 社区管理有捷径!Wish3D Earth社区网格化管理案例重磅上线
社区网格化是精细化.全覆盖.高效率的社区管理模式,便捷有效的社区网格化管理平台是社区网格化管理的关键. Wish3D Earth全新上线三维社区网格化管理平台,使用实景三维模型作为地图,地形地貌真实展 ...
- windows搭建json-server快速方法
JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. 一.下载并安装node.js 安装完后输入 node --vers ...
- zookeeper客户端 和服务器连接时版本问题
在使用kafka 和zookeeper 实现实时分析程序时,由于zookeeper部署版本和分析程序导入jar包的版本不一致,导致了当实时分析程序从远程服务器连接kafka集群的zookeeper时报 ...