J'essaye de me connecter avec un serveur en utilisant HttpURLConnection
, mais j'ai un problème avec la méthode PUT.
Je dois envoyer une chaîne avec 1500 caractères (ou plus), mais dans ce cas, le serveur produit un délai d'attente et renvoie 500 - erreur interne du serveur.
Si j'envoie une chaîne inférieure à 1400 caractères, je n'ai pas de problème et le serveur renvoie OK.Longueur maximale du contenu?
Mon code est le suivant:
public String connectToServer(String prototype) {
String responseString = "";
try {
BufferedReader in = new BufferedReader(new InputStreamReader(openURLForInput(new URL(URL), USERNAME, PASSWORD, prototype)));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
responseString += line;
}
} catch (IOException e) {
e.printStackTrace();
responseString = e.toString();
}
return responseString;
}
// -----------------------
public InputStream openURLForInput(URL url, String uname, String pword, String content) throws IOException {
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Authorization", userNamePasswordBase64(uname, pword)); // I know this is OK
conn.addRequestProperty("Content-type", "application/xml; charset=utf-8");
//conn.setChunkedStreamingMode(8 * 1024);
conn.setRequestMethod("PUT");
conn.connect();
OutputStream output = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(output, "UTF-8");
BufferedWriter writer = new BufferedWriter(osw);
writer.write(content); // content length > 1400 characters
writer.close();
output.close();
int status = conn.getResponseCode();
Log.i("STATUS", status + "");
Log.i("STATUS_ERROR", conn.getResponseMessage());
return conn.getInputStream();
}
I essayé d'ajouter les lignes
conn.setFixedLengthStreamingMode(contentLength)
conn.setChunkedStreamingMode(8 * 1024);
Mais la réponse du serveur est fausse quand même.
MISE À JOUR:
je pouvais détecter le problème. Pour une raison quelconque, lorsque je tente d'envoyer de gros bodys dans la demande, le serveur produit un délai d'attente mais pas avec tous les réseaux, uniquement avec certains réseaux. J'utilise une connexion sécurisée SSL, peut-être que cela peut causer des problèmes?
Et quel type de serveur est-ce que vous connectez; avez-vous un accès administrateur ou l'administrateur est-il un type amical à la table à côté de vous? –
essayez d'ajouter ceci: conn.addRequestProperty ("Content-Length", content.getLength()); – Kylar
Class Stacker: Nous pouvons, mais que devrions-nous demander? cette partie je ne sais pas. @Kylar: Nous avons déjà essayé de la sorte et nous avons tout de même fait passer le message à 1415 caractères. La chose étrange est que nous obtenons un TimeOut lorsque nous envoyons 1416, pas le message avec 1 caractère manquant (est-ce clair?) – SolArabehety