Jak używać cURL w Javie?

92

Jestem nowicjuszem w Javie i chciałem używać curl w Javie. Moje pytanie brzmi: curl jest wbudowany w Javę lub muszę go zainstalować z dowolnego źródła zewnętrznego, aby używać go z Javą. Jeśli tak, jak zainstalować curl w java. Szukam w Google przez długi czas, ale nie znalazłem żadnej pomocy. Mam nadzieję, że ktoś może mi tam pomóc.

Z góry dziękuję.

moshfiqur
źródło
@skaffman: Jeszcze nic. Jestem programistą PHP, który niedawno próbował Java. Więc naturalnie jestem bardzo przyzwyczajony do zwijania się. Tak więc, pracując nad Javą jako nowicjusz, pojawia się to pytanie, wciąż z ciekawości, ale jestem pewien, że w niedalekiej przyszłości będę go potrzebować. Jeśli ktoś zna lepszą alternatywę curl w javie, to też proszę o udostępnienie. Będzie to bardzo pomocne. Dzięki.
moshfiqur
Pytam, ponieważ CURL wykonuje całą masę rzeczy, z których część jest wbudowana w Javę, a część nie. Bardziej szczegółowe wymagania bardzo by tu pomogły.
skaffman

Odpowiedzi:

138

Możesz skorzystać z java.net.URLi / lub java.net.URLConnection.

URL url = new URL("https://stackoverflow.com");

try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) {
    for (String line; (line = reader.readLine()) != null;) {
        System.out.println(line);
    }
}

Zobacz także prosty samouczek Oracle na ten temat. Jest to jednak trochę rozwlekłe. Aby uzyskać mniej rozwlekły kod, możesz zamiast tego rozważyć Apache HttpClient .

Przy okazji: jeśli następne pytanie brzmi „Jak przetworzyć wynik HTML?”, Odpowiedź brzmi: „ Użyj parsera HTML . Nie, nie używaj do tego wyrażenia regularnego ”.

Zobacz też:

BalusC
źródło
@BalusC: Dzięki. Przeprowadzenie badań z podanych przez Ciebie linków. przy okazji, czy znasz lepszą alternatywę curl w Javie, która zapewni taką samą funkcjonalność jak curl? Dzięki jeszcze raz.
moshfiqur
7
Jak wspomniano, HttpClient jest „lepszą alternatywą”. W rzeczywistości możesz zrobić wszystko URLConnection, ale musisz znać i rozumieć specyfikacje HTTP. Nawiasem mówiąc, nie próbuj porównywać PHP z Javą. To jest jak jabłka i pomarańcze. Aby uniknąć kłopotów / nieporozumień, raczej zapomnij o PHP i odświeżyć spojrzenie na Javę. To język o zupełnie innej ideologii. PS: Robię jedno i drugie, więc mówię z doświadczenia.
BalusC
Ponieważ ta i inne osoby wspomniały, użyj HttpClient. Naprawdę radziłbym unikać używania libcurl, musisz upewnić się, że pakujesz natywną bibliotekę dla każdej platformy, którą chcesz obsługiwać, a wcześniej czy później ktoś będzie narzekał, że nie działa na ich starej stacji roboczej power mac lub SGI.
vickirk
nie sądzisz, catch block zawsze wygląda ładnie z blokiem try: D
Muhammad Suleman
Ahh ... teraz to rozumiem. możesz użyć tego typu kodu, gdzie będziemy potrzebować zagnieżdżonego try / catch. przepraszam, mój błąd!
Muhammad Suleman
4

Obiekt Runtime umożliwia uruchamianie zewnętrznych aplikacji wiersza poleceń z poziomu języka Java i dlatego umożliwia korzystanie z cURL, ponieważ inne odpowiedzi wskazują, że prawdopodobnie jest lepszy sposób na zrobienie tego, co próbujesz zrobić. Jeśli wszystko, co chcesz zrobić, to pobrać plik, obiekt URL będzie działał świetnie.

mjh2007
źródło
3

Curl nie jest programem Java i należy go udostępnić poza programem Java.

Możesz łatwo uzyskać większość funkcji za pomocą Jakarta Commons Net , chyba że istnieje jakaś konkretna funkcjonalność, taka jak „wznowienie transferu”, której potrzebujesz (która jest żmudna przy samodzielnym kodowaniu)

Thorbjørn Ravn Andersen
źródło
Niezły, ale Commons Net idzie trochę (za dużo) dalej niż curl.
BalusC
2

Użyj Runtime, aby zadzwonić do Curla. Ten kod działa zarówno w systemie Ubuntu, jak i Windows.

String[] commands = new String {"curl", "-X", "GET", "http://checkip.amazonaws.com"};
Process process = Runtime.getRuntime().exec(commands);
BufferedReader reader = new BufferedReader(new 
InputStreamReader(process.getInputStream()));
String line;
String response;
while ((line = reader.readLine()) != null) {
    response.append(line);
}
ariane26
źródło