Cambiar agente de usuario en UIWebView
Tengo una necesidad comercial de poder personalizar UserAgent para un UIWebView integrado. (Por ejemplo, me gustaría que el servidor responda de manera diferente si, por ejemplo, un usuario usa una versión de la aplicación u otra).
¿Es posible personalizar UserAgent en el control UIWebView existente tal como lo hace, por ejemplo, para un navegador IE integrado en una aplicación de Windows?
Vencejo moderno
Aquí hay una sugerencia para proyectos Swift 3+ de los usuarios de StackOverflow PassKit y Kheldar:
UserDefaults.standard.register(defaults: ["UserAgent" : "Custom Agent"])
Fuente: https://stackoverflow.com/a/27330998/128579
Respuesta anterior de Objective-C
Con los cambios de iOS 5, recomiendo el siguiente enfoque, originalmente de esta pregunta de StackOverflow: UIWebView iOS5 cambia el agente de usuario como se indica en la respuesta a continuación. En los comentarios de esa página, parece funcionar también en 4.3 y versiones anteriores.
Cambie el valor predeterminado de "UserAgent" ejecutando este código una vez cuando se inicie su aplicación:
NSDictionary *dictionary = @{@"UserAgent": @"Your user agent"}; [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; [[NSUserDefaults standardUserDefaults] synchronize];
Consulte las ediciones anteriores de esta publicación si necesita métodos que funcionen en versiones de iOS anteriores a 4.3/5.0. Tenga en cuenta que debido a las extensas ediciones, es posible que los siguientes comentarios/otras respuestas en esta página no tengan sentido. Después de todo, esta es una pregunta que hace cuatro años. ;-)
Yo también tuve este problema y probé todos los métodos. Descubrí que solo este método funciona (iOS 5.x): UIWebView iOS5 cambiando usuario-agente
El principio es configurar el agente de usuario de forma permanente en la configuración del usuario. Esto funciona; Webview envía el encabezado dado. Sólo dos líneas de código:
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/Whatever version 913.6.beta", @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
Configurar User-Agent o User_Agent en la solicitud mutable, o anular setValue en NSHttpRequest mediante swizzling. Intenté todo eso y controlé los resultados con Wirehark, y nada de eso parece funcionar, porque Webview todavía usa el valor del agente de usuario. de los valores predeterminados del usuario, sin importar lo que intente configurar en NSHttpRequest.
Debería funcionar con NSMutableURLRequest como ha escrito Kuso.
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: @"http://www.google.com/"]];
[urlRequest setValue: @"iPhone" forHTTPHeaderField: @"User-Agent"]; // Or any other User-Agent value.
Tendrás que usar NSURLConnection para obtener los datos de respuesta. Configure los datos de respuesta en su UIWebView y webView debería representar:
[webView loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL];