Как добавить настраиваемые заголовки HTTP в запросе UIWebView, мой UIWebView основан на проекте Cordova?
Моя страница iOS UIWebView основана на платформе Cordova с открытым исходным кодом, и я хочу добавить некоторые настраиваемые заголовки http в свой URL-запрос веб-просмотра, мое решение - добавить их в следующем методе делегата UIWebView.
Отладка показывает, что заголовки успешно добавлены, но на самом деле запрос не выводит их. Использование 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];
}
4 ответа
У вас есть два варианта: либо создать NSMutableUrlRequest в начале и загрузить его с помощью webView loadReqest, либо взять на себя полную загрузку URL вашего приложения с помощью NSURLProtocol.
Самый простой способ - это первый выбор, поскольку он содержит только одну дополнительную строку кода:
[webView loadRequest:mRequest];
Второй вариант использует NSURLProtocol для загрузки URL вашего приложения. это включает в себя регистрацию вашего собственного решения с использованием создания конкретного класса. основной метод для переопределения canonicalRequestForRequest
,
Я предлагаю вам взглянуть на эти два руководства NSNipster и Raywenderlich для руководства.
Я знаю, что уже поздно, но может помочь другим для SWIFT 3.0
let weburl = NSURL(string: "http://www.mywebsite.com")
let request = NSMutableURLRequest(URL: weburl!)
request.setValue("HEADER_VALUE", forHTTPHeaderField:"HEADER_NAME")
myWebView.loadRequest(request)
Иногда файлы cookie не устанавливаются даже после назначения всех заголовков http. Лучше создать изменяемый запрос, скопировать ваш 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 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)
чистый ответ соответствия 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)
}
где cachePolicy, timeoutInterval должны быть установлены в соответствии с вашими потребностями, а также оператором if let, чтобы получить гипотетический токен для вставки в запрос.
Соответствующей частью здесь является способ установки дополнительных параметров в URLRequest. Больше не нужно использовать изменяемое выражение. var - это то, что вы идете по URLRequest.