CURL Code in Java umwandeln?
Ich versuche über die DEEP API ein Bild generieren zu lassen.
Der Curl code dazu ist:
curl \
-F 'text=YOUR_TEXT_URL' \
-H 'api-key:quickstart-QUdJIGlzIGNvbWluZy4uLi4K' \
https://api.deepai.org/api/text2img
Mein Java Code ist:
URL url = new URL("https://api.deepai.org/api/text2img");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
JSONObject data = new JSONObject();
data.put("text", "TEXT");
data.put("api-key", "quickstart-QUdJIGlzIGNvbWluZy4uLi4K");
con.setDoOutput(true);
con.getOutputStream().write(data.toString().getBytes());
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();
}
Ich bekomme jedoch folgende Fehlermeldung:
Server returned HTTP response code: 401 for URL: https://api.deepai.org/api/text2img
Kann mir jemand weiterhelfen?
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
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.
Habe es jetzt so gemacht:
Und bekomme jetzt HTML Code 400 als Fehlermeldung