Измените агент пользователя в UIWebView

Насколько я вижу, это всего лишь ошибка в симуляторе консоли. Я написал реальный (Android) код приложения в соответствии с этими правилами и смог создать и удалить контент без проблем. Проблема в том, что симулятор не понимает, как интерпретировать request.resource == null, и в результате просто терпит неудачу.

Я напишу отчет об ошибке для этого, но вы всегда должны проверять свои правила на соответствие реальному продукту, если что-то не имеет смысла, так как трудно полностью синхронизировать симулятор.

68
задан Cœur 14 January 2019 в 03:51
поделиться

5 ответов

Это должно работать с NSMutableURLRequest, как записал Kuso.

NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://www.google.com/"]];
[urlRequest setValue: @"iPhone" forHTTPHeaderField: @"User-Agent"]; // Or any other User-Agent value.

необходимо будет использовать NSURLConnection для получения responseData. Установите responseData на свой UIWebView, и webView должен представить:

[webView loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL];
18
ответ дан Jesse 24 November 2019 в 14:08
поделиться

Modern Swift

Вот предложение для проектов Swift 3+ от пользователей StackOverflow PassKit и Kheldar:

UserDefaults.standard.register(defaults: ["UserAgent" : "Custom Agent"])

Источник: https://stackoverflow.com/a/27330998/ 128579

Предыдущий ответ Objective-C

С изменениями iOS 5 я рекомендую следующий подход, исходный из этого вопроса StackOverflow: UIWebView iOS5 с изменением агента пользователя , как указано в ответе ниже. В комментариях к этой странице, похоже, он работает и в 4.3 и более ранних версиях.

Измените значение "UserAgent" по умолчанию, запустив этот код один раз, когда ваше приложение запускается:

 NSDictionary * dictionary = @ {@ "UserAgent": @ "Your user agent"};
[[NSUserDefaults standardUserDefaults] registerDefaults: словарь];
[[NSUserDefaults standardUserDefaults] синхронизировать];

См. Предыдущие правки в этом сообщении, если вам нужны методы, которые работают в версиях iOS до 4.3 / 5.0. Обратите внимание, что из-за обширных правок следующие комментарии / другие ответы на этой странице могут не иметь смысла. В конце концов, это вопрос четырехлетней давности. ; -)

92
ответ дан 24 November 2019 в 14:08
поделиться

Беру всё так, как было решено для меня:

- (void)viewDidLoad {
    NSURL *url = [NSURL URLWithString: @"http://www.amazon.com"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setValue:@"Foobar/1.0" forHTTPHeaderField:@"User-Agent"];
    [webView loadRequest:request];
}

Спасибо всем.

6
ответ дан 24 November 2019 в 14:08
поделиться

Использование @"User_Agent" просто вызывает появление пользовательского заголовка в GET-запросе.

User_agent: Foobar/1.0\r\n
User-Agent: Mozilla/5.0 (iPhone; U; CPU) iPhone OS 3_1_2 как Mac OS X; en-us) AppleWebKit/528.18 (KHTML, например Gecko) Mobile/7D11\r\n

Вышеуказанное появляется в препарированном HTTP-пакете, по сути, подтверждая то, что Sfjava цитировала с того форума. Интересно отметить, что "User-Agent" превращается в "User_agent"

.
6
ответ дан 24 November 2019 в 14:08
поделиться

Это решение, кажется, было замечено как довольно умный способ сделать это

change-the-headers-for-uiwebkit-http-requests

Он использует метод Swizzling, а вы можете узнать больше об этом на странице CocoaDev

Взгляните!

4
ответ дан 24 November 2019 в 14:08
поделиться