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
![](https://images.gutefrage.net/media/default/user/11_nmmslarge.png?v=1551279448000)
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.
![](https://images.gutefrage.net/media/user/EclipseLight/1651432506987_nmmslarge__0_0_1400_1400_12f863478e3a55ad70794295ebf7770d.jpg?v=1651432507000)
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.
![](https://images.gutefrage.net/media/user/Spiderpig42/1523388482957_nmmslarge__104_37_406_406_4da7f0d1c5f707b4309bf110dfc99311.jpg?v=1523388483000)
Du musst den API Key zum Header hinzufügen und nicht zu den Post Daten.
https://stackoverflow.com/questions/12732422/adding-header-for-httpurlconnection
![](https://images.gutefrage.net/media/user/Spiderpig42/1523388482957_nmmslarge__104_37_406_406_4da7f0d1c5f707b4309bf110dfc99311.jpg?v=1523388483000)
Du erstellst zwar ein data Objekt, sendest es dann aber nicht.
![](https://images.gutefrage.net/media/user/Spiderpig42/1523388482957_nmmslarge__104_37_406_406_4da7f0d1c5f707b4309bf110dfc99311.jpg?v=1523388483000)
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