Ich versuche, einen curl-Befehl (der im Terminal funktioniert) durch meine Java-Anwendung auszuführen. Ich habe versucht, einen Prozess Builder sowie eine Runtime.exec()
zu verwenden. Ich bin in der Lage zu verbinden, aber die Antwort sagt entwederAusführen von Curl-Befehl in Java-Anwendung
{"result":0,"reason":"Unknown Json request format"}
oder
{"result":0,"reason":"Invalid client request Json string"}.
Hier ist der curl Befehl ist, die im Terminal funktioniert:
curl -X POST -d '{"command":"get","user":"R16","id":5552}' "http://<Ex.webaddress>"
Wenn dies ausgeführt wird, wird die Verbindung schlägt fehl
String testCurlCommand = "curl -X POST -d '{\"command\":\"get\",\"user\":\"R16\",\"id\":5552}' \"http://<Ex.webaddress\"";try {
//final Process terminal = curlCommand.start();
Process p = Runtime.getRuntime().exec(testCurlCommand);
try {
String responseString = readInputStream(p.getInputStream());
JSONObject job = new JSONObject(responseString);
// job.getString("Parameter")
statusLabel.setText("Command Result: " + job.toString());
connectionStatusLabel.setText("Connection Status: Successful");
} catch (JSONException e) {
statusLabel.setText("Command Result: 0");
connectionStatusLabel.setText("Connection Status: Failed");
}
} catch (IOException ex) {
statusLabel.setText("Command Result: 0");
connectionStatusLabel.setText("Connection Status: Failed");
}
W hen die String testCurlCommand zu ändern, indem die Angebote rund um die Web-Adresse zu entfernen, erhalten die Verbindung funktioniert, aber ich die „unbekannte Json Anforderungsformat“
String testCurlCommand = "curl -X POST -d '{\"command\":\"get\",\"user\":\"R16\",\"id\":5552}' http://<Ex.webaddress";
Ive versucht, die entkommen Anführungszeichen zu entfernen, und ich bekomme immer noch die gleichen. Ive versuchte auch mit Prozessbauer:
ProcessBuilder testCurlCommand = new ProcessBuilder("curl", "-X", "POST", "-d", "'{\"command\":\"get\",\"user\":\"R16\",\"id\":\"5552\"}'", "\"http://<examplewebaddress>\"")
Ich denke, es ist etwas, mit dem Formating (extra Zitat oder etwas) zu tun, aber ich bin nicht sicher. Jede Hilfe ist sehr appreciated.I die readInputStream Funktion hinzufügen unter:
static private String readInputStream(InputStream inputStream) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream, "UTF-8"));
String tmp;
StringBuilder sb = new StringBuilder();
while ((tmp = reader.readLine()) != null) {
sb.append(tmp).append("\n");
}
if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '\n') {
sb.setLength(sb.length() - 1);
}
reader.close();
return sb.toString();
}
Warum Sie das tun Sie nicht Ihre POST mit Java direkt anstelle ich wäre viel einfacher, so einfacher zu pflegen und Cross-Plattform –
Ich bin nicht sicher, wie das zu tun, haben Sie irgendwelche Links, die ich besuchen sollte? Danke –