[Java] URL aus Java aufrufen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von fragl0r, 8. Januar 2013 .

Schlagworte:
  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
     
  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.
     
  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?
     
  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.
     
  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?
     
  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.

    Bild

    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.
  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
     
  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
     
  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
     
  10. 9. Januar 2013
    AW: URL aus Java aufrufen

    +

    Http Authentication
     
  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.
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.