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添加请求头的两种方式的更多相关文章

  1. jmeter请求参数的两种方式

    Jmeter做接口测试,Body与Parameters的选取 1.普通的post请求和上传接口,选择Parameters. 2.json和xml请求接口,选择Body. 注意: 在做接口测试时注意下请 ...

  2. Android请求服务器的两种方式--post, get的区别

    android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html Android提交数 ...

  3. Ajax请求数据的两种方式

    ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...

  4. 不停mysql服务添加从库的两种方式

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库.前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作. ...

  5. iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式 方式一:iOS4版本之前      static SingleClassManager *singleManager = nil;      +(SingleClas ...

  6. Ajax设置自定义请求头的两种方法

    用自定义请求头token为例 方法一 $.ajax({ type: "post", url:"http://127.0.0.1:4564/bsky-app/templat ...

  7. struts2 添加请求后缀的3种方式

    第一种方式在struts.xml文件中添加 <constant name="struts.action.extension" value="">&l ...

  8. ios中@class和 #import,两种方式的讨论

    转自:http://blog.sina.com.cn/s/blog_a843a8850101b6a7.html 很多刚开始学习iOS开发的同学可能在看别人的代码的时候会发现有部分#import操作写在 ...

  9. IOS 跳转至AppStore的两种方式

    //第一种方法 直接跳转 id+编号 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps: ...

随机推荐

  1. koa2 从入门到进阶之路 (三)

    之前的文章我们介绍了一下 koa 路由,get 传值,动态路由,本节我们看一下 koa 中间件 以及 koa 中间件的洋葱图执行流程. 一.什么是 Koa 的中间件 通俗的讲:中间件就是匹配路由之前或 ...

  2. 【强连通分量】 Kosaraju和Tarjan算法 (标准模板+详细注释)

    codevs 题意:求最大强连通分量的大小以及所包含的顶点有哪些 Tarjan算法 #include<iostream> #include<queue> #include< ...

  3. 【JSOI2007】文本生成器

    用AC自动机处理所有了解的单词 显然,不能直接算,直接算的话,我们需要大力容斥,复杂度不允许 我们不妨反过来做,我们根据AC自动机处理出所有的不可行解,然后用总数减去即可 计算所有不可行解用dp,\( ...

  4. 让cpu占用率曲线听你指挥(多核处理器)

    编程之美 1.1 让cpu占用率曲线听你指挥(多核处理器) [版权声明]转载请注明出处 http://www.cnblogs.com/TenosDoIt/p/3242910.html  [目录] 不考 ...

  5. https的实现原理

    加密算法 有两种基本的加解密算法类型: 1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES.AES等: 2)非对称加密:密钥成对出现(且根据公钥无法推知私钥, ...

  6. ORACLE SQL*PLUS环境变量设置及说明

    1:查看当前用户的环境设置: SQL> define DEFINE _DATE " (CHAR) DEFINE _CONNECT_IDENTIFIER = "updb&quo ...

  7. shell脚本 linux脚本

    linux:shell 脚本 如果判断当前时间 是不是12点之前 用date命令先取得当前的时间(仅取小时数) : date '+%H'     #按24小时制取hour (00..23) 然后与12 ...

  8. Scut游戏服务器引擎6.5.8.6发布

    1.增加从Redis中加载数据到Cache可设置筛选条件2.修改在Web项目中的不能支持自定协议问题3.修改Share类型的Model在Redis中为空时会尝试从DB中加载数据4.修改Model命名空 ...

  9. [置顶] zabbix发送告警

    之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ...

  10. 学习PHP:PHP提取的时间出现不准确

    php函数date("Y-n-d   H-i-s");   输出的时间与当地时间居然相差了8个小时.     原因是从php5.1.0开始,php.ini里加入了date.time ...