2008-12-01 8 views
18

Mon code est comme ce qui suit:Quelle est la bonne façon de définir les en-têtes dans une connexion URLConnection?

URLConnection cnx = address.openConnection(); 
cnx.setAllowUserInteraction(false);   
cnx.setDoOutput(true); 
cnx.addRequestProperty("User-Agent", 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 
InputStream is = cnx.getInputStream(); 

Est-il ok si je mets les en-têtes avant que je le InputStream? Mon en-tête sera-t-il envoyé ou le serveur verra-t-il l'agent utilisateur par défaut de URLConnection (le cas échéant)?

Répondre

20

Les en-têtes doivent être réglés avant d'obtenir le InputStream d'avoir aucun effet - un IllegalStateException sera lancé si la connexion est déjà ouverte.

En ce qui concerne spécifiquement l'en-tête User-Agent, il doit être envoyé s'il a été défini. Voir le URLConnection JavaDoc.

+1

Ce lien est cassé. – Fabii

4

Pour répondre à la question, le code est correct. A l'instant getInputStream(), un get HTTP est envoyé au serveur cible.

A côté note sur l'agent utilisateur, si vous ne définissez pas, URLConnection envoie la valeur par défaut de toute façon, ce qui est:

User-Agent: Java/1.6.0_24 (varies depending on your java version) 
-2

Je vous conseille de ne pas utiliser des constructions de bas niveau tels comme URLConnection. Il y a beaucoup de bibliothèques pour l'envoi de requêtes HTTP, le plus important étant le client HTTP Apache.

+0

(doit être un commentaire, ne répond pas à la question) – BadZen

+0

Le client HTTP Apache est déconseillé et obsolète dans le cadre Android. Google encourage l'utilisation de HttpURLConnection. – afollestad

Questions connexes