javawordpressapache-commonsapache-commons-compress

How to download WordPress with Java


I want to download WordPress with Java.

My code looks like this:

public void file(String surl, String pathToSave) throws IOException {
    URL url = new URL(surl);
    sun.net.www.protocol.http.HttpURLConnection con = (HttpURLConnection) url.openConnection();
    try (InputStream stream = con.getInputStream()) {
        Files.copy(stream, Paths.get(pathToSave));
    }
}

I am using this url to download the latest version of WordPress: http://wordpress.org/latest.tar.gz

But when I try extracting the tar.gz file I get an error saying the file is not in a gzip format.

I read this Issues uncompressing a tar.gz file and it looks like when I download WordPress I need to have a cookie enabled to accept the terms and services.

How would I do this?

Or am I incorrectly downloading the tar.gz file?

Here is what my tar.gz extracting code:

public class Unzip {
public static int BUFFER = 2048;
public void tar(String pathToTar, String outputPath) throws IOException {
    File tarFile = new File(pathToTar);
    TarArchiveInputStream tarInput =
            new TarArchiveInputStream(new GZIPInputStream(new FileInputStream(tarFile)));

    TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
    while(currentEntry != null) {
        if (currentEntry.isDirectory()) {

            File f = new File(outputPath + currentEntry.getName());
            f.mkdirs();
        }
        else {
            int count;
            byte data[] = new byte[BUFFER];

            FileOutputStream fos = new FileOutputStream(outputPath
                    + currentEntry.getName());
            BufferedOutputStream dest = new BufferedOutputStream(fos,
                    BUFFER);
            while ((count = tarInput.read(data, 0, BUFFER)) != -1) {
                dest.write(data, 0, count);
            }
            dest.close();
        }
    }
}

}

Thanks in advance.


Solution

    1. Change sun.net.www.protocol.http.HttpURLConnection to java.net.HttpURLConnection

    2. Add fos.close() after dest.close()

    3. You must call currentEntry = tarInput.getNextTarEntry(); inside the while loop, too.

    There is nothing with cookie enabled or accept the terms and services.

    Here is my complete code. Please try this and compare it to your code:

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.zip.GZIPInputStream;
    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
    import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
    
    public class Downloader {
    
        public static final int BUFFER = 2048;
    
        private void download(String surl, String pathToSave) throws IOException {
            URL url = new URL(surl);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            try (InputStream stream = con.getInputStream()) {
                Files.copy(stream, Paths.get(pathToSave));
            }
        }
    
        private void unGz(String pathToGz, String outputPath) throws IOException {
            FileInputStream fin = new FileInputStream(pathToGz);
            BufferedInputStream in = new BufferedInputStream(fin);
            try (FileOutputStream out = new FileOutputStream(outputPath)) {
                try (GzipCompressorInputStream gzIn = new GzipCompressorInputStream(in)) {
                    final byte[] buffer = new byte[BUFFER];
                    int n = 0;
                    while (-1 != (n = gzIn.read(buffer))) {
                        out.write(buffer, 0, n);
                    }
                }
            }
        }
    
        public void unTarGz(String pathToTar, String outputPath) throws IOException {
            File tarFile = new File(pathToTar);
            TarArchiveInputStream tarInput
                    = new TarArchiveInputStream(new GZIPInputStream(new FileInputStream(tarFile)));
    
            TarArchiveEntry currentEntry;
            while ((currentEntry = tarInput.getNextTarEntry()) != null) {
                if (currentEntry.isDirectory()) {
                    File f = new File(outputPath + currentEntry.getName());
                    f.mkdirs();
                } else {
                    int count;
                    byte data[] = new byte[BUFFER];
                    try (FileOutputStream fos = new FileOutputStream(outputPath
                            + currentEntry.getName())) {
                        try (BufferedOutputStream dest = new BufferedOutputStream(fos,
                                BUFFER)) {
                            while ((count = tarInput.read(data, 0, BUFFER)) != -1) {
                                dest.write(data, 0, count);
                            }
                        }
                    }
                }
            }
        }
    
        public static void main(String[] args) throws IOException {
            Downloader down = new Downloader();
            down.download("https://wordpress.org/latest.tar.gz", "/tmp/latest.tar.gz");
            down.unTarGz("/tmp/latest.tar.gz", "/tmp/untar/");
        }
    }