Maison  >  Article  >  Java  >  Pourquoi suis-je incapable de définir des en-têtes à l'aide de la méthode setRequestProperty() de HttpURLConnection ?

Pourquoi suis-je incapable de définir des en-têtes à l'aide de la méthode setRequestProperty() de HttpURLConnection ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-09 09:24:02410parcourir

Why Am I Unable to Set Headers Using HttpURLConnection's setRequestProperty() Method?

Comment ajouter des en-têtes aux demandes de connexion HttpURL

Lorsque vous travaillez avec des requêtes HTTP, l'ajout d'en-têtes personnalisés est crucial pour authentifier les requêtes, envoyer des données supplémentaires, et contrôler les comportements du serveur. Cependant, les utilisateurs ont rencontré des problèmes avec la méthode setRequestProperty() dans HttpURLConnection, remettant en question son efficacité. Cet article examine le problème et propose une solution.

Le code fourni démontre une tentative d'ajout d'un en-tête Authorization à une requête HTTP à l'aide de setRequestProperty(). Cependant, le serveur ne recevrait pas l'en-tête.

Pour résoudre ce problème, il est important de vérifier si l'en-tête est envoyé correctement. Un problème possible est que le corps de la requête a déjà été écrit avant que l'en-tête ne soit défini. Dans de tels cas, l'en-tête peut ne pas être inclus dans la demande. Pour résoudre ce problème, l'en-tête doit être défini avant l'écriture de toute sortie.

Alternativement, une approche différente peut être utilisée pour ajouter des en-têtes, comme démontré dans la solution fournie :

URL myURL = new URL(serviceURL);
HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();

String userCredentials = "username:password";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userCredentials.getBytes()));

myURLConnection.setRequestProperty ("Authorization", basicAuth);
myURLConnection.setRequestMethod("POST");
myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
myURLConnection.setRequestProperty("Content-Length", "" + postData.getBytes().length);
myURLConnection.setRequestProperty("Content-Language", "en-US");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);

Ceci Le code configure une requête POST et définit manuellement l'en-tête Authorization avec la syntaxe correcte à l'aide du codage Base64. En définissant explicitement les en-têtes, cela garantit qu'ils sont inclus dans la demande. De plus, l'en-tête Content-Length est également défini, ce qui est important pour les requêtes POST avec un corps.

En implémentant ces solutions, les utilisateurs peuvent ajouter efficacement des en-têtes personnalisés à leurs requêtes HttpURLConnection, permettant ainsi une authentification et un contrôle appropriés des requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn