Cambiar agente de usuario en UIWebView

Resuelto asked hace 54 años • 0 respuestas

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?

 avatar Jan 01 '70 08:01
Aceptado

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. ;-)

Louis St-Amour avatar Sep 02 '2009 15:09 Louis St-Amour

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.

winitzki avatar Jun 19 '2012 08:06 winitzki

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];
Dshutsi avatar Feb 17 '2009 21:02 Dshutsi