2016-06-01 19 views
2

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(); 
} 
+1

Warum Sie das tun Sie nicht Ihre POST mit Java direkt anstelle ich wäre viel einfacher, so einfacher zu pflegen und Cross-Plattform –

+0

Ich bin nicht sicher, wie das zu tun, haben Sie irgendwelche Links, die ich besuchen sollte? Danke –

Antwort

0

Für mich sieht aus wie ein Anführungszeichen Problem. versuchen, konsequent zu sein und versuchen Sie die folgenden Anführungszeichen mit einem Backslash zu entkommen

curl -X POST -d '{"command":"get","user":"R16","id":5552}' 'http://<Ex.webaddress>' 

. PS: Ich habe gerade die URL Anführungszeichen aus "zu"

1

Der beste Weg, ich weiß, ist mit DavidWebb

Sie könnte es tun mit so etwas wie:

Response<JSONObject> result = Webb.create().post("http://<Ex.webaddress>") 
     .body("{\"command\":\"get\",\"user\":\"R16\",\"id\":5552}").asJsonObject(); 
JSONObject job = result.getBody(); 
+0

Danke! Was muss ich importieren? Ich habe die David Webb-JAR-Datei heruntergeladen und sie der Bibliothek hinzugefügt. –

+0

Sie benötigen diese http://mvnrepository.com/artifact/org.json/json/20080701, wie Sie hier sehen können https://github.com/hgoebl/DavidWebb/blob/master/pom.xml#L26-L30 –