web-dev-qa-db-ja.com

httpCon.setRequestMethod( "GET");が設定されていても、HttpURLConnectionはPOST要求を送信します

ここに私のコードがあります:

_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();
_

応答で私が見るもの:

500サーバーエラー

httpCon varを開き、表示されるもの:

POST/rest/platform/domain/list HTTP/1.1

httpCon.setRequestMethod("GET");を使用してGETに設定したのに、なぜPOST=)に設定されるのですか?

28
Lesya Makhova

httpCon.setDoOutput(true);は、要求メソッドをPOST)に暗黙的に設定します。これは、要求本文を送信する場合のデフォルトメソッドであるためです。

GETを使用する場合は、その行を削除し、OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());行を削除します。 GETリクエストのリクエスト本文を送信する必要はありません。

単純な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());

こちらもご覧ください:


具体的な問題とは無関係Authorizationヘッダー値のパスワード部分はBase64で正しくエンコードされていないようです。たぶんそれはほんの一例だったのでスクランブルされたかもしれませんが、たとえそうではなかったとしても、Base64エンコーディングアプローチを修正します。

63
BalusC