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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM