Як використовувати cURL в Java?


92

Я новачок у Java і хотів використовувати curl в Java. Моє питання - це вбудований curl в Java, або я повинен встановити його з будь-якого стороннього джерела для використання з Java. Якщо так, то як встановити curl в Java. Я довго гуглив, але не знайшов допомоги. Сподіваюся, хтось може мені допомогти.

Заздалегідь спасибі.


@skaffman: Ще нічого. Я програміст PHP, який нещодавно пробує java. Тож, природно, я дуже звик завивати. Отож, працюючи над java-початківцем, це питання виникає у мене на думці, все ще з цікавості, але я впевнений, що найближчим часом воно мені знадобиться. Якщо хтось знає кращу альтернативу curl в Java, то, будь ласка, також поділіться. Це буде дуже корисно. Дякую.
moshfiqur


Я запитую, тому що CURL робить цілу купу речей, частина з яких вбудована в Java, а частина - ні. Більш конкретні вимоги тут дуже допомогли б.
skaffman

Відповіді:


138

Ви можете скористатися java.net.URLта / або 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);
    }
}

Також див . Простий підручник Oracle з цього питання. Однак це трохи багатослівно. Щоб у результаті вийшло менше багатослівного коду, ви можете замість цього розглянути Apache HttpClient .

До речі: якщо ваше наступне запитання "Як обробити результат HTML?", То відповідь: " Використовуйте синтаксичний аналізатор HTML . Ні, не використовуйте для цього регулярний вираз .".

Дивіться також:


@BalusC: Дякую. Виконуючи деякі дослідження за наданими вами посиланнями. До речі, чи знаєте ви щось кращу альтернативу curl в Java, яка забезпечить таку ж функціональність, як curl? Знову дякую.
moshfiqur

7
Як вже згадувалося, HttpClient є "кращою альтернативою". Насправді ви можете робити все URLConnection, але вам ще потрібно знати і розуміти специфікації HTTP. До речі, не намагайтеся порівнювати PHP з Java. Це як яблука та апельсини. Щоб уникнути неполадок / плутанини, скоріше забудьте про PHP і подивіться на Java на новий погляд. Це мова з зовсім іншою ідеологією. PS: Я роблю обидва, тому я розповідаю з досвіду.
BalusC,

Оскільки цей та інші люди згадували, використовуйте HttpClient. Я справді рекомендую уникати використання libcurl, ви повинні переконатися, що ви поєднуєте рідну бібліотеку для кожної платформи, яку ви хочете підтримувати, і рано чи пізно хтось скаржиться, що вона не працює на їхніх старих робочих станціях Power Mac або SGI.
vickirk

ти не думаєш, блок блоку завжди добре виглядає з блоком try: D
Мухаммад Сулеман

Ааа ... тепер я зрозумів. Ви можете використовувати цей тип коду там, де нам знадобиться вкладений try / catch. вибачте за мою помилку!
Мухаммед Сулеман,


4

Об'єкт Runtime дозволяє вам виконувати зовнішні програми командного рядка з Java і, отже, дозволить вам використовувати cURL, однак, як свідчать інші відповіді, існує, мабуть, кращий спосіб зробити те, що ви намагаєтеся зробити. Якщо все, що вам потрібно зробити, це завантажити файл, об’єкт URL буде чудово працювати.



3

Curl є не Java-програмою і повинна надаватися поза вашою програмою Java.

Ви можете легко отримати більшу частину функціональних можливостей, використовуючи Jakarta Commons Net , за винятком випадків, коли вам потрібна якась конкретна функціональність, наприклад, "відновлення передачі" (що втомлює кодування самостійно)


Хороший, але Commons Net йде трохи (занадто) далі, ніж curl.
BalusC,

2

Використовуйте Runtime для виклику Curl. Цей код працює як для Ubuntu, так і для 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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.