#1 8. Januar 2013 URL aus Java aufrufen Hi Leute, ich will nen DynDNS-Update aus meiner Java herraus machen. Bisher mache ich das wie folgt: Code: private boolean updateDynDNS() { Desktop desk = Desktop.getDesktop(); try { desk.browse(new URI( "http://*USER*:*PASSWORT*@dynupdate.no-ip.com/nic/update?hostname=*HOST*&myip=" + getInternetIP())); return true; } catch (IOException e) { return false; } catch (URISyntaxException e) { return false; } } private String getInternetIP() { Return Meine-Internet-Adresse-eben. } Aber das nervt, das jedes mal der Browser startet... ist das auch anders realisierbar? greetz fragl0r + Multi-Zitat Zitieren
#2 8. Januar 2013 Zuletzt bearbeitet: 8. Januar 2013 AW: URL aus Java aufrufen Code: public static String getURLContent(String url) { StringBuffer content = new StringBuffer(); try { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new URL(url).openConnection().getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { content.append(line + System.lineSeparator()); } bufferedReader.close(); } catch (Exception e) { e.printStackTrace(); return null; } return content.toString(); } Code: getURLContent("http://*USER*:*PASSWORT*@dynupdate.no-ip.com/nic/update?hostname=*HOST*&myip=" + getInternetIP()) Wobei du die Funktion noch um das auslesen des Outputs berauben könntest, da du das scheinbar nicht brauchst. URL.openConnection() würde wahrscheinlich reichen. Für komplexere GET bzw. POST Anfragen ist HttpURLConnection wahrscheinlich am besten. + Multi-Zitat Zitieren
#3 8. Januar 2013 Zuletzt bearbeitet: 8. Januar 2013 AW: URL aus Java aufrufen Goil, wie einfach ist das denn!! Und ich habs wirklich gesucht..., aber offensichtlich nach dem falschen. Danke! //Edit: Meh, das geht nicht. Bekomme folgende Fehlermeldung: java.io.IOException: Server returned HTTP response code: 401 for URL: http://*USER*:*PASSWORT*@dynupdate.no-ip.com/nic/update?hostname=*HOST*&myip=1.1.1.1 Wenn ich die URL in Firefox kopiere kommt da ne Frage von Firefox ob ich mich da Anmelden will. Liegt daran der Fehler? + Multi-Zitat Zitieren
#4 8. Januar 2013 Zuletzt bearbeitet: 8. Januar 2013 AW: URL aus Java aufrufen Was heißt "da Anmelden"? Eine htaccess Abfrage? Also der Fehler 401 heißt Unauthorized. Musst dich also noch vorher anmelden. Siehe dazu: Http Authentication //Edit: Auf den link klicken hätte gereicht Also es sieht für mich so aus, dass wenn du die Seite mit User asswort@domain aufrufst noch ein Bestätigungsdialog "Wollen sie wirklich??" kommt. Wenn man direkt die Domain aufruft, kommt eben die htaccess abfrage. Also den Aufruf auf die "normale" Domain machen und dann die htaccess Geschichte einbinden. + Multi-Zitat Zitieren
#5 8. Januar 2013 AW: URL aus Java aufrufen Schonmal per Wireshark mitgesnifft, was aufgerufen wird? Also welche URL und ob die Login-Daten anständig übermittelt werden? + Multi-Zitat Zitieren
#6 9. Januar 2013 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: URL aus Java aufrufen Ich hoffe du hast statt *USER* und *PASSWORD* auch die richtigen Daten eingetragen, denn wenn nicht gibts was mit der Paddel. ggf. auch nochmal prüfen ob die Zugangsdaten richtig sind. Irgendwelche Abfragen sind immer Browserspezifisch und haben damit nichts zu tun. Das HTT-Protokoll stellt dir keine Fragen und wartet auf eine Antwort, das ist viel zu "dumm" für sowas 2 Person(en) gefällt das. + Multi-Zitat Zitieren
#7 9. Januar 2013 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: URL aus Java aufrufen Heute wird nicht gepaddelt! Habs mit korrekten Daten gemacht... das Sniffen werde ich später mal austesten. Danke für eure Antworten! Sobald ichs getestet habe, gebe ich Rückmeldung obs funzt oder nicht. greetz fragl0r Edit: Habs jetzt mal gesnifft... Scheinbar wird die URL ohne "*User*:*Password*" übermittelt und daher fehlt die Anmeldung. Also statt: Code: http://*USER*:*PASSWORT*@dynupdate.no-ip.com/nic/update?hostname=*HOST*&myip="1.1.1.1 das hier: Code: http://dynupdate.no-ip.com/nic/update?hostname=*HOST*&myip="1.1.1.1 Hat da jemand ne schnelle Lösung für? Sonst versuch ich mich mal mit dem, was hier vorher geposted worden ist. Glaube aber nich, dass ich das ohne Probleme hinbekommen werde greetz fragl0r + Multi-Zitat Zitieren
#8 9. Januar 2013 AW: URL aus Java aufrufen Du weißt scheinbar nicht, dass das auch so sein sollte. Basic access authentification übertragt Username und Password als base64-enkodierten String im Header der HTTP-Anfrage. xolox hatte bereits darauf hingewiesen. Geht auf verschiedene Arten, hier eine einfache Möglichkeit: siehe z.B. java - Preemptive Basic Auth with HttpUrlConnection? - Stack Overflow + Multi-Zitat Zitieren
#9 9. Januar 2013 AW: URL aus Java aufrufen Dann bau die Anfrage einfach per Hand nach. Die API ist ja dokumentiert: Request Method - No-IP + Multi-Zitat Zitieren
#11 10. Januar 2013 AW: URL aus Java aufrufen Mit eurer Hilfe und vielem googlen konnte ich das Problem dann lösen... Vielen Dank! Hat mir gelehrt, wie wenig Ahnung ich eigentlich habe. Habe es mit diesem Code von dieser Seite gelöst: Code: private void updateDynDNS() { HttpURLConnection connection = null; BufferedReader rd = null; StringBuilder sb = null; String line = null; byte[] encoded = Base64.encodeBase64((_user + ":" + _pass).getBytes()); URL serverAddress = null; try { serverAddress = new URL(_adresse); // set up out communications stuff connection = null; // Set up the initial connection connection = (HttpURLConnection) serverAddress.openConnection(); connection.setRequestProperty("Authorization", "Basic " + new String(encoded)); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.setReadTimeout(10000); connection.connect(); // read the result from the server rd = new BufferedReader(new InputStreamReader(connection.getInputStream())); sb = new StringBuilder(); while ((line = rd.readLine()) != null) { sb.append(line + '\n'); } System.out.println(sb.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // close the connection, set all objects to null connection.disconnect(); rd = null; sb = null; connection = null; } } 1 Person gefällt das. + Multi-Zitat Zitieren