NSURLConnection et user-agent

groumpfgroumpf Membre
Salut,

je crois que je vais devenir dingue avec iOS5, j'essaye de positionner un user-agent dans une requete :

<br />		request = [[NSMutableURLRequest requestWithURL:url] retain];<br />		[request setValue:@&quot;mon UA&quot; forHTTPHeaderField:@&quot;User-Agent&quot;];<br />		<br />		NSLog(@&quot;user-agent = %@&quot;, [request valueForHTTPHeaderField:@&quot;User-Agent&quot;]);<br />		NSURLConnection* oConn = [NSURLConnection connectionWithRequest:request delegate:self];<br />		[oConn start];<br />


Et bien ce code ne fonctionne pas sur iOS5. Si je ne met pas de UA particulier je récupère celui de l'application, si j'en met un je récupère celui de Safari Mobile !!
:'(

Pour le moment la seule solution que je vois est d'utiliser une API comme ASIHTTPRequest, du moins si elle est indépendante des classes du SDK.
Quelqu'un a déjà  eu mon problème ou utilisé ASIHTTPRequest ?


Réponses

  • groumpfgroumpf Membre
    20:51 modifié #2
    Erratum, en fait ça fonctionne mais comme j'utilise une UIWebWiew et que ma conf était spéciale, ça ne marchait pas.
    Toujours est-il que j'en suis arrivé là  car le method swizzle pour changer le user-agent d'une requête ne fonctionne plus sous iOS5, donc je cherchais d'autres solutions.
    Donc pour résumer :
    la UIWebView impose son User-Agent
    On peut positionner le User-agent mais uniquement sur les requêtes extérieures à  la webview, pour les ressources ou les requêtes faites en javascript, la webview reprend le user-agent standard.
  • AliGatorAliGator Membre, Modérateur
    20:51 modifié #3
    Pourquoi un swizzle pour modifier le user-agent ?

    Moi je l'ai modifié pour toutes les requêtes, avec la méthode de delegate (c'est vrai qu'il faut regarder au debuguer et savoir / réaliser en regardant la variable que la NSURLRequest est en fait Mutable donc qu'on peut la modifier à  la volée) :
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {<br />	if (self.useDesktopUserAgent) {<br />		[(NSMutableURLRequest*)request setValue:kDesktopUserAgentString forHTTPHeaderField:@&quot;User-Agent&quot;];<br />	}<br />	return YES;<br />}
    
    Donc en gros quand la UIWebView essaye de charger une requête, n'importe laquelle, tu modifies son User-Agent à  la volée pour chaque requête (marche que ce soit des requêtes suite à  un clic, à  un redirect, etc)
  • groumpfgroumpf Membre
    20:51 modifié #4
    Oui mais avec ce système (qui suppose de caster en mutable, c'est moyen), les requêtes internes à  la webview ne sont pas modifiées (ressources, javascript ...).

    Pour info il y a aussi cette solution http://www.mphweb.com/en/blog/easily-set-user-agent-uiwebview
    Mais qui semble utiliser une propriété UserAgent non documentée. Par contre ça marche partout si on n'a pas besoin de le changer.
  • AliGatorAliGator Membre, Modérateur
    20:51 modifié #5
    Pas mal bon à  savoir !

    Moi ça m'ira pas car cela dépend des cas (comme tu peux le voir dans mon code j'ai une propriété useDesktopUserAgent qui peut parfois être YES, parfois NO) par contre. Du coup le swizzling peut être une option aussi (en faisant gaffe et sachant ce qu'on fait).
Connectez-vous ou Inscrivez-vous pour répondre.