web-dev-qa-db-fra.com

HttpURLConnection envoie une demande POST même si httpCon.setRequestMethod ("GET"); est défini

Voici mon code:

String addr = "http://172.26.41.18:8080/domain/list";

URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.setRequestMethod("GET");
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");

httpCon.connect();

OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());

System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

out.close();

Ce que je vois en réponse:

500 Erreur du serveur

J'ouvre mon httpCon var, et ce que je vois:

POST/reste/plateforme/domaine/liste HTTP/1.1

Pourquoi est-il défini sur POST même si j'ai utilisé httpCon.setRequestMethod("GET"); pour le définir sur GET?

29
Lesya Makhova

La httpCon.setDoOutput(true); définit implicitement la méthode de demande à POST car c'est la méthode par défaut chaque fois que vous souhaitez envoyer un corps de demande.

Si vous souhaitez utiliser GET, supprimez cette ligne et supprimez la ligne OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());. Vous n'avez pas besoin d'envoyer un corps de demande pour les demandes GET.

Ce qui suit devrait faire pour une simple demande GET:

String addr = "http://172.26.41.18:8080/domain/list";
URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

Voir également:


Sans rapport avec le problème concret, la partie mot de passe de votre valeur d'en-tête Authorization ne semble pas être correctement encodée en Base64. Peut-être que c'est brouillé parce que c'était exemplaire, mais même si ce n'était pas le cas, je corrigerais votre approche d'encodage Base64.

63
BalusC