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ę.


@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: 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.



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)


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);
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.