2010-10-11 4 views
35

Comment obtenir le périphérique réel dans http_user_agent? Lorsque j'utilise une WebView, je peux obtenir la valeur réelle comme ceci:Agent utilisateur HTTP Android

[HTTP_USER_AGENT] => Mozilla/5.0(Linux; U; Android 2.2; en-gb; LG-P500 Build/FRF91) 
AppleWebKit/533.0 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 

Mais quand j'utilise une connexion Apache, le résultat est différent:

[HTTP_USER_AGENT] => Apache-HttpClient/UNAVAILABLE(java 1.4). 

Quel est le problème?

Répondre

60

Si vous ne souhaitez pas appeler setHeader() pour chaque demande que vous créez, vous pouvez définir le paramètre client http CoreProtocolPNames.USER_AGENT. Après avoir fait cela, le client HTTP ajoutera automatiquement ce paramètre d'en-tête à chaque requête.

Quelque chose comme:

client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Custom user agent"); 

lorsque vous créez votre HttpClient.

13

Si vous souhaitez définir votre propre en-tête d'agent utilisateur, vous devez utiliser la méthode setHeader.

Dans le cas d'une requête HTTP Post, il vous suffit de le définir comme ceci.

private String url = "http://myfancyurl.com/"; 
private String ua = "My Custom UA Header String"; 

private HttpPost post = new HttpPost(url); 
post.setHeader("User-Agent", ua); 

Ce n'était qu'une courte explication sur la façon de définir une chaîne d'agent utilisateur personnalisée. Votre code peut sembler différent. La partie importante est la méthode setHeader.

+0

Dans ce cas, je ne voulais pas mettre mon propre utilisateur agent. Je veux que ce soit automatique comme dans WebView. y-a-t'il une solution? Merci. – user430926

+0

En fait, vous ne devriez pas utiliser d'autres clients http User Agents, car certains serveurs ont un contenu différent selon l'agent utilisateur (ie le contenu optimisé pour ce navigateur) – Tseng

+0

Bien si vous avez un cas spécial où vous avez un service dépendant d'un utilisateur personnalisé agent chaîne alors il n'y a pas moyen de contourner. –

67

Pour compléter la réponse acceptée, si vous voulez l'utiliser l'agent utilisateur par défaut System.getProperty (« http.agent »)

client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, 
           System.getProperty("http.agent")); 
+7

celui-ci est la meilleure réponse que les réponses ci-dessus! Merci! –

+2

Les autres réponses ne répondent pas à la question. Merci! – dtbarne