URLRequest header 永久

URLRequest header permanent

我有 webView,我在其中加载了一些 url。我需要为该 URLRequest 设置自定义 header。对于第一个请求,它按预期工作,服务器端收到 header 并相应地显示内容。但是,如果我从显示的页面打开另一个 link,header 将丢失,并且在没有 header.

的情况下发送请求

我的幸运猜测是,header 只是第一次添加,每次发送加载 url 的请求时我都必须添加它。但是我找不到在哪里可以这样做的方法。

目前我在 viewDidLoad

中设置 header
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);

}

我是不是遗漏了什么或者我应该为每个请求在不同的地方添加 header?

是的,您应该在每次创建请求时添加自定义 headers。

好的,感谢 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,那么我不加载当前请求,而是复制它,重新应用自定义 header 并将其加载到 myWebView 中。 如果 navigationType 不是 linkClicked,我将不做任何更改继续请求。