web-dev-qa-db-fra.com

Comment résoudre "Erreur HTTP 411. La demande doit être fragmentée ou avoir une longueur de contenu." en java

J'utilise HttpConnect et j'essaie d'obtenir un jeton du serveur. Mais chaque fois que j'essaie d'obtenir la réponse, c'est toujours dire que vous n'avez pas défini de problème de longueur de contenu, même si j'ai essayé de définir la longueur de contenu de différentes manières.

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();
6
Aniruddha Das

Passer de HttpConnect à HttpClient a fonctionné pour moi. Je me suis donc éloigné de HttpURLConnection pour créer un objet http HttpClient et appeler des méthodes d'exécution pour obtenir des données du serveur.

Ci-dessous, le code qui crée une requête http en utilisant HttpClient plutôt HttpURLConnection

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());
}
0
Aniruddha Das

Vous définissez une longueur de contenu mais n'envoyez jamais de corps de requête.

Ne pas définir la longueur du contenu. Java le fait pour vous.

NB setDoOutput(true) définit la méthode sur POST.

0
user207421