設置referer,根據HTTP RFC你不應該,因爲你的應用程序不能尋址使用URI:
引薦字段不能如果從沒有自己的URI(例如來自 用戶鍵盤的輸入)的源獲得請求URI獲得 ,則被髮送。
...除非您使用綁定到您的應用程序的自定義協議(myapp://blah.com/blah)。
您可以create one手動或調用loadRequest:或攔截用戶提出的正常請求。
- (BOOL) webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType) navigationType
{
NSDictionary *headers = [request allHTTPHeaderFields];
BOOL hasReferer = [headers objectForKey:@"Referer"]!=nil;
if (hasReferer) {
// .. is this my referer?
return YES;
} else {
// relaunch with a modified request
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSURL *url = [request URL];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[request setHTTPMethod:@"GET"];
[request setValue:@"https://whatever.com" forHTTPHeaderField: @"Referer"];
[self.webView loadRequest:request];
});
});
return NO;
}
}
感謝來自RFC的說明。我沒有意識到這一點。我的用戶在瀏覽器中打開外部鏈接時所在的屏幕有自己的URI,所以我不適用於我。 –
我從哪裏得到NSMutableURLRequest實例? UIWebViewDelegate不給我Mutable版本。我發現一些參考文獻說我可以可靠地施放它,但我想知道是否有更好的方法。 –
我不知道這是否是猶太教,但你可以攔截並重新發起請求。 – Jano