如何在UIWebView请求中添加自定义HTTP头,我的UIWebView基于Cordova项目?

我的iOS UIWebView页面基于Cordova开源框架,我想在其webview URL请求中添加一些自定义的http头,我的解决scheme是将它们添加到下面的UIWebView委托方法中。

debugging显示标题添加成功,但实际上请求不会带出它们。 使用Wireshark捕获networking数据包,发现只有标准头可用,没有我自定义的。

我的testing是基于模拟器(iOS 7.1),任何有这方面经验的人请一起分享和讨论,谢谢。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // Add customize http headers in UIWebView request if([request isKindOfClass:[NSMutableURLRequest class]]) { NSMutableURLRequest * mRequest = (NSMutableURLRequest *)request; [mRequest setValue:@"1.1" forHTTPHeaderField:@"appVersion"]; [mRequest setValue:@"iPhone 4S" forHTTPHeaderField:@"deviceModel"]; } return [super webView:webView shouldStartLoadWithRequest:request navigationType:navigationType]; } 

你有两个select,在开始时创build一个NSMutableUrlRequest ,并使用webView loadReqest加载,或者使用NSURLProtocol接pipe应用程序的完整URL加载。

最简单的方法是作为唯一的额外的代码行的第一个select:

 [webView loadRequest:mRequest]; 

第二个select使用NSURLProtocol来接pipe您的应用程序的URL加载。 这涉及到使用创build具体类注册自己的解决scheme。 要覆盖的主要方法是canonicalRequestForRequest

我build议你看看这两个教程NSNipster和raywenderlich指南。

我知道它晚了,但可能会帮助其他人SWIFT 3.0

 let weburl = NSURL(string: "http://www.mywebsite.com") let request = NSMutableURLRequest(URL: weburl!) request.setValue("HEADER_VALUE", forHTTPHeaderField:"HEADER_NAME") myWebView.loadRequest(request) 

有时甚至在您分配所有的http头之后,Cookies也不会被设置。 创build可变请求并复制你的nsurlrequest并添加你的自定义头文件以使原始请求中的所有信息都保留在可变的请求中更好。

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { if(check if key not present){ NSMutableURLRequest *re = [[NSMutableURLRequest alloc] init];//alloc init not required re = (NSMutableURLRequest *) request.mutableCopy; [re setValue:@"Your Custom Value" forHTTPHeaderField:@"Yout Custom Header"]; [webView loadRequest:re] ; return NO; } return YES; }