Ios URL请求头永久
我在webView中加载了一些url。我需要为该URL请求设置自定义标头。对于第一个请求,它会按预期工作,在服务器端接收头并相应地显示内容。然而,若我从显示的页面中打开另一个链接,标题将丢失,请求将在不带标题的情况下发送 我的幸运猜测是,头只是第一次添加,每次发送加载url的请求时,我都必须添加头。然而,我找不到方法在哪里可以这样做 目前我正在viewDidLoad中设置标题Ios URL请求头永久,ios,uiwebview,swift3,Ios,Uiwebview,Swift3,我在webView中加载了一些url。我需要为该URL请求设置自定义标头。对于第一个请求,它会按预期工作,在服务器端接收头并相应地显示内容。然而,若我从显示的页面中打开另一个链接,标题将丢失,请求将在不带标题的情况下发送 我的幸运猜测是,头只是第一次添加,每次发送加载url的请求时,我都必须添加头。然而,我找不到方法在哪里可以这样做 目前我正在viewDidLoad中设置标题 override func viewDidLoad() { super.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);
}
是我遗漏了什么,还是我应该为每个请求在不同的位置添加标题?是的,您应该在每次创建请求时添加自定义标题。好的,多亏了iPhonec,指向shouldStartLoadWith。我可以用它来理解is请求新的或旧的,并通过这样做来解决我的问题:
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链接,我将继续请求而不做任何更改。实现此委托函数
func-webView(\uwebview:UIWebView,shouldStartLoadWith-request:URLRequest,navigationType:UIWebViewNavigationType)->Bool
对于webview中的所有新请求,将调用此方法。您可以获取请求的url,如果url不是父url,则可以使用添加的标题发出新请求。这可能会起作用。然而,这里的请求是不可变的,所以我必须将其复制到新的var,然后添加值,但我如何才能将其设置回webView?您需要创建新的请求,如果您的webView支持导航,那么您需要维护url数组,而不是每次导航都需要从数组创建新的请求。