URLRequest标头永久

时间:2017-01-05 12:41:09

标签: ios uiwebview swift3

我有webView,我加载了一些网址。我需要为该URLRequest设置自定义标头。对于第一个请求,它按预期工作,在服务器端接收标头,并相应地显示内容。但是,如果我从显示的页面打开另一个链接,标题将丢失,请求将在没有标题的情况下发送。

我的幸运猜测是,标头只是第一次添加,每次发送加载网址请求时我都要添加标头。但是,我无法找到方法,我可以这样做。

目前我在viewDidLoad中设置标题

override func viewDidLoad() {
    super.viewDidLoad()


    myWebView.delegate = self

    let url = URL(string: "https://mywebsite.com");
    var requestobj = URLRequest(url: url!);
    requestobj.addValue("my_request_id", forHTTPHeaderField: "X-Requested-With");

    myWebView.loadRequest(requestobj);

}

我是否遗漏了某些内容,或者我是否应该在每个请求的不同位置添加标题?

2 个答案:

答案 0 :(得分:1)

是的,每次创建请求时都应添加自定义标头。

答案 1 :(得分:1)

好的,感谢iphonic,指着shouldStartLoadWith。我可以用它来理解请求新的或旧的并通过这样做来解决我的问题:

func webView(_ webView: UIWebView,
                      shouldStartLoadWith request: URLRequest,
                      navigationType: UIWebViewNavigationType) -> Bool{


   if(navigationType == UIWebViewNavigationType.linkClicked) 
   {

        var req = request; 

        req.addValue("my_request_id", forHTTPHeaderField: "X-Requested-With"); 


        self.myWebView.loadRequest(req); 
            return false; 

    }
    else {
        return true; 
    }



}

所以我在这里查看,如果导航类型是clickedLink,那么我不加载当前请求,而是复制它,重新应用自定义标头并将其加载到myWebView中。 如果navigationType没有linkClicked,我继续请求而不做任何更改。