Obtenir la source du site web en java


Je voudrais utiliser java pour obtenir la source d'un site Web (sécurisé), puis analyser ce site Web pour les liens qui s'y trouvent. J'ai trouvé comment me connecter à cette URL, mais alors comment puis-je obtenir facilement juste la source, preferraby comme le document DOM oso que je pourrais facilement obtenir les informations que je veux.

Ou existe-t-il un meilleur moyen de se connecter au site https, d'obtenir la source (ce que je ne sais pas faire pour obtenir une table de données...c'est assez simple) alors ces liens sont des fichiers que je vais télécharger.

Je j'aimerais que ce soit FTP mais ce sont des fichiers stockés sur mon tivo (je veux les télécharger par programme sur mon ordinateur(

Author: Nas Banov, 0000-00-00

2 answers

Vous pouvez obtenir un niveau bas et le demander simplement avec un socket. En java, cela ressemble à

// Arg[0] = Hostname
// Arg[1] = File like index.html
public static void main(String[] args) throws Exception {
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();

    SSLSocket sslsock = (SSLSocket) factory.createSocket(args[0], 443);

    SSLSession session = sslsock.getSession();
    X509Certificate cert;
    try {
        cert = (X509Certificate) session.getPeerCertificates()[0];
    } catch (SSLPeerUnverifiedException e) {
        System.err.println(session.getPeerHost() + " did not present a valid cert.");
        return;
    }

    // Now use the secure socket just like a regular socket to read pages.
    PrintWriter out = new PrintWriter(sslsock.getOutputStream());
    out.write("GET " + args[1] + " HTTP/1.0\r\n\r\n");
    out.flush();

    BufferedReader in = new BufferedReader(new InputStreamReader(sslsock.getInputStream()));
    String line;
    String regExp = ".*<a href=\"(.*)\">.*";
    Pattern p = Pattern.compile( regExp, Pattern.CASE_INSENSITIVE );

    while ((line = in.readLine()) != null) {
        // Using Oscar's RegEx.
        Matcher m = p.matcher( line );  
        if( m.matches() ) {
            System.out.println( m.group(1) );
        }
    }

    sslsock.close();
}
 5
Author: Bernie Perez, 2009-01-08 03:32:36