Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UIWebView请求中添加自定义HTTP头,我的UIWebView基于Cordova项目?_Ios_Cordova_Uiwebview_Http Headers - Fatal编程技术网

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

Ios 如何在UIWebView请求中添加自定义HTTP头,我的UIWebView基于Cordova项目?,ios,cordova,uiwebview,http-headers,Ios,Cordova,Uiwebview,Http Headers,我的iOS UIWebView页面基于Cordova开源框架,我想在其webview URL请求中添加一些自定义http头,我的解决方案是在以下UIWebView委托方法中添加它们 Debug显示头被成功添加,但实际上请求并没有将它们显示出来。使用Wireshark捕获网络数据包,发现只有标准头可用,没有自定义头 我的测试是基于模拟器(iOS 7.1)的,任何有这方面经验的人请一起分享和讨论,提前谢谢 - (BOOL)webView:(UIWebView *)webView shouldStar

我的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];
}

您有两个选项,一个是在开始时创建并使用webView loadReqest加载,另一个是使用接管应用程序的完整URL加载

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

[webView loadRequest:mRequest];
第二个选项用于接管应用程序的URL加载。这涉及到使用创建一个具体类来注册您自己的解决方案。重写的主要方法是
canonicalRequestForRequest


我建议您看看这两个教程和指南。

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

}
我知道现在很晚了,但可能会帮助其他人学习SWIFT 3.0


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语句,以获取要插入请求中的假设令牌


这里的相关部分是在URL请求上设置附加参数的方法。不再需要使用可变的语句var是您在URLRequest

Swift 5.2解决方案上所做的选择

通过发出
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)

谢谢Shams,最后我通过破解Cordova代码选择了#1。@jianhua我正在做同样的事情,你能用你的最终解决方案更新你的问题吗?NSURL协议是处理这个问题的实际方法。但当涉及ajax时,处理起来很棘手。如果网站代码中存在任何Ajax调用,则需要异步调用。重定向时不会加载标题,一些web请求在navigationType other下加载,并且没有标题,如果我们强制它们使用标题,它们就不会重定向。如果您还必须显示“上一步”和“下一步”按钮,这将破坏您的导航历史。它可以工作!我必须启用应用程序传输安全设置->允许Web内容中的任意加载=是覆盖func viewDidLoad(){super.viewDidLoad()//加载视图后,通常从nib执行任何其他设置。让weburl=URL(字符串:)let request:NSMutableURLRequest=NSMutableURLRequest(url:weburl!)request.setValue(“myvalue”,forHTTPHeaderField:“MyKEY”)webview.delegate=self webview.loadRequest(请求为URLRequest);}你怎么测试它?看起来不识别it@UmairKhalid好的……我在那个网站上测试是因为我还没有服务。
@IBOutlet var wkWebView: WKWebView!
let url = URL(string: "https://YouAreBest.com")
var request = URLRequest(url: url!)
request.setValue("1", forHTTPHeaderField:"userid")
wkWebView.load(request)