CURL Code in Java umwandeln?

3 Antworten

Ergänzend zur anderen Antwort, für die Nachwelt: es gibt seit etlichen Jahren (seit Java 11) einen modernen und viel einfacheren HTTP-Client in der Java-Standardbibliothek.

https://docs.oracle.com/en/java/javase/17/docs/api/java.net.http/java/net/http/HttpClient.html

Es gibt also heute wirklich keinen Grund mehr, sich mit der uralten HttpURLConnection und InputStreamReader & Co. zu quälen.

Ein HTTP-Statuscode 401 bedeutet normalerweise, dass eine Authentifizierung erforderlich ist, um auf die Ressource zuzugreifen. In diesem Fall könnte es bedeuten, dass der API-Schlüssel ungültig oder nicht autorisiert ist, um die text2img-API von DeepAI aufzurufen.

Stellen Sie sicher, dass Sie einen gültigen API-Schlüssel für die DeepAI-API haben und dass Sie ihn korrekt in Ihrem Code verwenden. Überprüfen Sie auch, ob die API-Endpunkt-URL korrekt ist und ob es keine Tippfehler oder andere Fehler in Ihrem Code gibt, die den API-Aufruf verhindern.

Wenn Sie sicher sind, dass alles korrekt ist, könnte das Problem auf der Seite der DeepAI-API liegen. In diesem Fall sollten Sie sich an den Support von DeepAI wenden, um weitere Hilfe zu erhalten.

Du musst den API Key zum Header hinzufügen und nicht zu den Post Daten.

https://stackoverflow.com/questions/12732422/adding-header-for-httpurlconnection

mprex 
Fragesteller
 10.03.2023, 17:13

Habe es jetzt so gemacht:

URL url = new URL("https://api.deepai.org/api/text2img");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("api-key", "quickstart-QUdJIGlzIGNvbWluZy4uLi4K");

JSONObject data = new JSONObject();
data.put("text", msg);

con.setDoOutput(true);

try(BufferedReader br = new BufferedReader(
        new InputStreamReader(con.getInputStream(), "utf-8"))) {
    StringBuilder response = new StringBuilder();
    String responseLine = null;
    while ((responseLine = br.readLine()) != null) {
        response.append(responseLine.trim());
    }
    return response.toString();
}

Und bekomme jetzt HTML Code 400 als Fehlermeldung

0
Spiderpig42  10.03.2023, 17:15
@mprex

Du erstellst zwar ein data Objekt, sendest es dann aber nicht.

0
Spiderpig42  10.03.2023, 17:20
@mprex

Es gibt übrigens eine einfache Methode, um deinen Code zu testen. Starte einen Server mit netcat. Zum Beispiel so: "nc -l -p 80"

Dann änderst du die URL in deinem Code zu "http://localhost/api/text2img". Danach testest du das dann einmal mit dem curl Befehl und einmal mit deinem Java Code, um den Unterschied zu sehen.

0