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

问题描述 投票:3回答:5

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

Debug显示标题已成功添加,但实际上请求并未将其带出。使用Wireshark捕获网络数据包,发现只有标准标头可用,而没有我的自定义标头。

我的测试基于模拟器(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];
}
ios cordova uiwebview http-headers
5个回答
3
投票

您有两个选择,要么在开始时创建一个NSMutableUrlRequest并使用webView loadReqest进行加载,要么使用NSURLProtocol接管应用程序的完整URL加载。

最简单的方法是首选,因为它只有一行额外的代码:

[webView loadRequest:mRequest];

第二选择使用NSURLProtocol来接管您的应用程序的URL加载。这涉及使用创建具体类来注册自己的解决方案。覆盖的主要方法是canonicalRequestForRequest

我建议您看一下这两个教程NSNipsterraywenderlich作为指南。


17
投票

我知道较晚,但可能会帮助他人使用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)

5
投票

有时,即使您分配了所有http标头,也不会设置Cookies。最好创建可变请求并复制您的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;

}

0
投票

a pure Swift 4合规性答案应类似于以下内容:

if let anURL = URL(string: aString) {
    var aRequest = URLRequest(url: anURL, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 5.0)
    if let tmpToken = Network.shared.getAuthenticationToken() {
        aRequest.setValue(tmpToken, forHTTPHeaderField: "Authorization")
    }
    self.loadRequest(aRequest)
}

其中cachePolicytimeoutInterval将根据您的需要进行设置,以及if let语句,以便获得要在请求中插入的假设令牌。

这里的相关部分是way,您可以在URLRequest上设置其他参数。不再需要使用Mutable语句。 var是您在URLRequest上执行的操作。


0
投票

Swift 5.2解决方案

通过制作URLRequestsetValue

@IBOutlet var wkWebView: WKWebView!
let url = URL(string: "https://YouAreBest.com")
var request = URLRequest(url: url!)
request.setValue("1", forHTTPHeaderField:"userid")
wkWebView.load(request)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.