J'essaie de faire une demande de vente avec des données JSON à l'aide de HttpURLConnection
en Java. La façon dont je le fais ne fonctionne pas. Je n'ai aucune erreur donc je ne sais pas quel est le problème.
public static void main(String[] args) {
URL url;
try {
url = new URL("http://fltspc.itu.dk/widget/515318fe17450f312b00153d/");
HttpURLConnection hurl = (HttpURLConnection) url.openConnection();
hurl.setRequestMethod("PUT");
hurl.setDoOutput(true);
hurl.setRequestProperty("Content-Type", "application/json");
hurl.setRequestProperty("Accept", "application/json");
String payload = "{'pos':{'left':45,'top':45}}";
OutputStreamWriter osw = new OutputStreamWriter(hurl.getOutputStream());
osw.write(payload);
osw.flush();
osw.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Et voici la demande que j'essaie de faire:
Je faisais déjà des demandes d'obtention de la ressource dans la même application et cela a fonctionné bien. Je serais très reconnaissant pour tous les conseils sur la façon dont puis-je déboguer cela ou comment puis-je essayer de le faire d'une autre manière. Jusqu'à présent, j'ai essayé uniquement d'utiliser OutputStream
au lieu de OutputStreamWriter
mais cela ne fonctionne pas non plus.
La mise en œuvre du Sun (Oracle) de HttpurlConnection cache le contenu de votre message à moins que vous ne le disiez en mode streaming. Le contenu sera envoyé si vous démarrez une interaction avec la réponse telle que:
hurl.getResponseCode();
De plus, selon RFC 4627, vous ne pouvez pas utiliser de guillemets simples dans votre JSON (bien que certaines implémentations semblent ne pas s'en soucier).
Alors, changez votre charge utile sur:
String payload = "{\"pos\":{\"left\":45,\"top\":45}}";
Cet exemple fonctionne pour moi
public class HttpPut {
public static void main(String[] args) throws Exception {
Random random = new Random();
URL url = new URL("http://fltspc.itu.dk/widget/515318fe17450f312b00153d/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("PUT");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Accept", "application/json");
OutputStreamWriter osw = new OutputStreamWriter(connection.getOutputStream());
osw.write(String.format("{\"pos\":{\"left\":%1$d,\"top\":%2$d}}", random.nextInt(30), random.nextInt(20)));
osw.flush();
osw.close();
System.err.println(connection.getResponseCode());
}
}