HttpConnectを使用していて、サーバーからトークンを取得しようとしています。しかし、私が応答を得ようとすると、コンテンツの長さをさまざまな方法で設定しようとしても、コンテンツの長さを設定したり問題が発生したりしていないと常に言われます
conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod(method);
conn.setRequestProperty("X-DocuSign-Authentication", httpAuthHeader);
conn.setRequestProperty("Accept", "application/json");
if (method.equalsIgnoreCase("POST")) {
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", Integer.toString(body.length()));
conn.setDoOutput(true);
}
status = conn.getResponseCode(); // triggers the request
if (status != 200) { //// 200 = OK
errorParse(conn, status);
return;
}
InputStream is = conn.getInputStream();
HttpConnect
からHttpClient
への移行は私にとってはうまくいきました。そこで、HttpURLConnection
から離れて、http HttpClient
オブジェクトを作成し、executeメソッドを呼び出してサーバーからデータを取得しました。
以下は、HttpClient
ではなくHttpURLConnection
を使用してhttpリクエストを行うコードです。
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(authUrl);
String json = "";
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("phone", "phone");
json = jsonObject.toString();
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.addHeader("Accept", "application/json");
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse httpResponse = httpclient.execute(httpPost);
// 9. receive response as inputStream
inputStream = httpResponse.getEntity().getContent();
String response = getResponseBody(inputStream);
System.out.println(response);
} catch (ClientProtocolException e) {
System.out.println("ClientProtocolException : " + e.getLocalizedMessage());
} catch (IOException e) {
System.out.println("IOException:" + e.getLocalizedMessage());
} catch (Exception e) {
System.out.println("Exception:" + e.getLocalizedMessage());
}
コンテンツの長さを設定していますが、リクエスト本文を送信していません。
しないでくださいコンテンツの長さを設定します。 Javaはあなたのためにそれをします。
NB setDoOutput(true)
はメソッドをPOSTに設定します。