Скачать тарбол из репозитория - PullRequest
1 голос
/ 22 мая 2011

В настоящее время я работаю над проектом для очистки исходного кода от SourceForge. Я хотел бы загрузить архив из репозитория кода.

Пример ссылки приведен ниже: http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar

Проблема, с которой я столкнулся при загрузке, заключается в том, что я не могу использовать обычные API URLConnection, HttpClient, HtmlUnit, Jsoup и т. Д. Для загрузки файла. Указанная ссылка не содержит имени файла или расширения, что делает процесс загрузки еще более сложным.

Можете ли вы предложить способ, с помощью которого из набора тарбол-ссылок в качестве параметров я смогу загрузить их на свой диск? Кроме того, я смог загрузить его с помощью wget. Есть ли способ, которым я могу программно сделать это на Java в Windows?

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Прежде чем идти дальше своими усилиями, внимательно прочитайте страницу Sourceforge Условия использования .Если вы не понимаете ToS, свяжитесь с Sourceforge и спросите их, разрешено ли вам делать то, что вы предлагаете.


Проблемы, с которыми я столкнулся при загрузке, заключаются в том, что я не могудля загрузки файла используйте обычные URL, http, htmlunit, jsoup apis и т. д.

Ваше предположение неверно.

Вы МОЖЕТЕ использовать такие API, как стандартный HttpURLConnection API илиApache HttpClient API для таких вещей.Если это не работает, это потому, что

  • вы что-то делаете неправильно (например, вы не настроили свое приложение Java для использования локального HTTP-прокси), или
  • Sourceforge использует некоторые технические средства, чтобы остановить вас;см. ToS.

Если вы опубликуете некоторые подробности о том, что происходит, когда вы попробуете эти подходы, возможно, мы сможем вам помочь.

(HtmlUnit и Jsoup, вероятно, неуместны, поскольку они нацеленыСодержимое HTML.)

Указанная ссылка не содержит имени файла или расширения, что делает процесс загрузки еще более сложным.

Вы можете получить имя файла источника и /или тип содержимого из заголовков ответа.Подробнее см. В спецификации HTTP.

1 голос
/ 21 марта 2012

Если вы действительно хотите нарушить ToS SourceForges, это может помочь.

Вам нужен wget.exe, как вы и хотели.

ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
Process p = pb.start();

Это будет работатьдо тех пор, пока у вас есть wget.exe в том же каталоге, что и файл класса.

Вы также можете проверить, существует ли файл, в этом случае вы должны сделать что-то из строк:

ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
       Process p = pb.start();
       int exitValue = p.waitFor();
       BufferedReader reader;
       // System.out.println("Exit Value" + exitValue);
       if (exitValue == 0) {
               reader = new BufferedReader(new InputStreamReader(p
                               .getInputStream()));
       } else {
               reader = new BufferedReader(new InputStreamReader(p
                               .getErrorStream()));
       }
       StringBuffer sb = new StringBuffer();
       String temp = reader.readLine();
       while (temp != null) {
               sb.append(temp);
               temp = reader.readLine();
       }

       reader.close();
       System.out.println(sb.toString());
if(sb.toString().indexOf("404") != -1) {
//means that the file does not exist
System.out.println("File does not exist, or access is denied");
} else {
if(sb.toString().indexOf("200") != -1) {
//file exists, download it
System.out.println("File exists, downloading...");
ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
    Process p = pb.start();
}

Но я рекомендую НЕ очищать SourceForge, если только это не ваш собственный код, который вы очищаете (я делал это однажды в качестве программы обновления).Если да, и мой пример помогает, пожалуйста, не упоминайте меня.=]

Надеюсь, я помог!

...