2012-06-21 3 views
3

J'essaie d'utiliser un java.net.HttpURLConnection pour faire une requête HTTP à un serveur. L'un des en-têtes HTTP que je dois envoyer est "Via". Dans mon code il y a quelque chose comme ceci:HttpURLConnection ne me laisse pas définir l'en-tête "Via"

connection.addRequestProperty("X-test", "test_header_contents"); // just a sanity test 
connection.addRequestProperty("Via", "via_header_contents"); 

Lorsque j'utilise un renifleur de paquets, je peux voir que l'en-tête de test traverse mais par tête n'est pas. Je sais que Via est un en-tête « restreint », donc j'ajouté cette ligne:

System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); 

Cette ligne travaillé quand j'ai eu le même problème dans le passé, mais il ne fonctionne pas maintenant. Je sais que la propriété system est définie, car j'appelle System.getProperty juste avant que j'essaie d'ajouter les en-têtes HTTP et renvoie true. Y a-t-il autre chose que je devrais faire pour pouvoir envoyer l'en-tête via? Comme je l'ai dit, cela a fonctionné avant, mais pas maintenant. Je pense que la seule chose qui a changé, c'est que je suis passé de Java 6 à 7. Merci pour toute aide que vous pouvez me donner.

Répondre

4

Répondre à ma propre question.

Le problème est que je définissais la propriété système sun.net.http.allowRestrictedHeaders trop tard dans le programme. Je l'ai placé immédiatement avant que j'aie essayé d'envoyer les en-têtes, et c'était trop tard, apparemment parce que HttpURLConnection fait une sorte de mise en cache des propriétés. En réglant la propriété au début du programme, j'ai réussi à faire en sorte que tout fonctionne.

1

J'ai le même problème cep « Trailer » en-tête

J'utilise aussi:

System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); 

je le fais dans le constructeur statique de la classe principale et passer avec les paramètres JVM

<PARAM name="java_arguments" value="-Dsun.net.http.allowRestrictedHeaders=true"> 

Cela fonctionne si je lance l'applet à partir d'Eclipse, mais ne fonctionne pas lorsqu'il est exécuté à partir du navigateur

4

Le code source code for OpenJDK 7 (build 43) indique qu'ils utilisent un bloc d'initialisation statique pour définir cette propriété et mettre en cache la valeur. Vous devez donc définir la propriété avant qu'elle ne soit définie. Cela signifie qu'il doit être défini avant le chargement initial de la classe HttpURLConnection.

Questions connexes