How to add customize HTTP headers in UIWebView request, my UIWebView is based on Cordova project?
Solution 1
You have two options either create a NSMutableUrlRequest at the start and load that with webView loadReqest or take over the complete URL loading of your app with NSURLProtocol.
The most easiest way is the first choice as its only one extra lines of code:
[webView loadRequest:mRequest];
The second choice uses NSURLProtocol to take over URL loading of your app. this involves registering your own solution using creating a concrete class. the main method to override is canonicalRequestForRequest
.
I suggest you take a look at these two tutorials NSNipster and raywenderlich for guides.
Solution 2
I know its late but may help others for 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)
Solution 3
Sometimes Cookies are not set even after you assign all http headers. it is better to create mutable request and copy your nsurlrequest and add your custom header to it so that all information from original request is retained in mutable one.
- (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;
}
Solution 4
Swift 5.2 Solution
By making URLRequest
& setValue
@IBOutlet var wkWebView: WKWebView!
let url = URL(string: "https://YouAreBest.com")
var request = URLRequest(url: url!)
request.setValue("1", forHTTPHeaderField:"userid")
wkWebView.load(request)
jianhua
Transfer from iOS to front-end developing for about one year.
Updated on June 13, 2020Comments
-
jianhua about 4 years
My iOS UIWebView page is based on Cordova open source framework, and I want to add some customize http headers in its webview URL request, my solution is to add them in the following UIWebView delegate method.
Debug shows that headers are added successfully, but in fact the request doesn't bring them out. Using Wireshark to capture network packets and found only standard headers are available, no my customize ones.
My testing is based on simulator (iOS 7.1), anyone who has experience on this topic please share and discuss together, thanks in advance.
- (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]; }