Как использовать cURL в Java?

92

Я новичок в java и хотел использовать curl в java. В чем мой вопрос: curl встроен в java, или мне нужно установить его из любого стороннего источника для использования с Java. Если да, то как установить curl в java. Давно гуглил, но помощи не нашел. Надеюсь, что кто-нибудь сможет мне помочь.

Заранее спасибо.

мошфикур
источник
@skaffman: Пока ничего. Я программист PHP, который недавно пробовал java. Естественно, я очень привыкла к завивке. Итак, пока я начинаю работать над java, мне приходит в голову этот вопрос, все еще из любопытства, но я уверен, что в ближайшем будущем он мне понадобится. Если кто-нибудь знает лучшую альтернативу curl в java, поделитесь, пожалуйста. Это будет очень полезно. Спасибо.
moshfiqur
1
Очень близко к stackoverflow.com/questions/116650/curl-equivalent-in-java
Pascal Thivent 06
Я спрашиваю, потому что 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
источник
@BalusC: Спасибо. Проведение некоторых исследований по предоставленным вами ссылкам. Кстати, знаете ли вы что-нибудь получше, чем curl в java, которое обеспечит такую ​​же функциональность, как и curl? Еще раз спасибо.
moshfiqur
7
Как уже упоминалось, HttpClient - «лучшая альтернатива». Фактически, вы можете делать все URLConnection, но вам еще нужно знать и понимать спецификации HTTP. Кстати, не пытайтесь сравнивать PHP с Java. Это как яблоки и апельсины. Чтобы избежать неприятностей / недоразумений, лучше забудьте о PHP и по-новому взгляните на Java. Это язык с совершенно другой идеологией. PS: Я делаю и то, и другое, поэтому говорю по опыту.
BalusC
Как уже упоминали этот и другие люди, используйте HttpClient. Я действительно рекомендовал бы избегать использования libcurl, вы должны убедиться, что вы связали родную библиотеку для каждой платформы, которую хотите поддерживать, и рано или поздно кто-то будет жаловаться, что она не работает на их старом мощном Mac или рабочей станции SGI.
vickirk
Вам не кажется, что блок catch всегда выглядит хорошо с блоком try: D
Мухаммад Сулеман
Ах ... теперь я понял. вы можете использовать этот тип кода там, где нам понадобится вложенный try / catch. Извините моя ошибка!
Мухаммад Сулеман
5

Некоторые люди уже упоминали HttpURLConnection , URL и URLConnection . Если вам нужны все элементы управления и дополнительные функции, которые предоставляет вам библиотека curl (и многое другое), я бы порекомендовал Apache httpclient .

Сет
источник
4

Объект Runtime позволяет вам выполнять внешние приложения командной строки из Java и, следовательно, позволит вам использовать cURL, однако, поскольку другие ответы показывают, что, вероятно, есть лучший способ сделать то, что вы пытаетесь сделать. Если все, что вам нужно сделать, это загрузить файл, объект URL будет отлично работать.

mjh2007
источник
3

Используя стандартные библиотеки java, я предлагаю взглянуть на класс HttpUrlConnection http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html

Он может справиться с большей частью того, что curl может сделать с установкой соединения. Что делать с потоком - решать вам.

Стевко
источник
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);
}
ариана26
источник