¿Cómo usar cURL en Java?

92

Soy un novato en java y quería usar curl en java. Mi pregunta es curl integrado en java o tengo que instalarlo desde cualquier fuente de terceros para usarlo con Java. Si es así, cómo instalar curl en java. He estado buscando en Google durante mucho tiempo, pero no encontré ninguna ayuda. Espero que alguien pueda ayudarme.

Gracias por adelantado.

moshfiqur
fuente
@skaffman: Nada todavía. Soy un programador de PHP que recientemente está probando Java. Así que, naturalmente, estoy muy acostumbrado a rizarme. Entonces, mientras trabajaba en Java como un novato, esta pregunta surge en mi mente, todavía por curiosidad, pero estoy seguro de que en un futuro cercano la necesitaré. Si alguien conoce alguna alternativa mejor de curl en java, por favor también compártala. Será muy útil. Gracias.
moshfiqur
Lo pregunto porque CURL hace un montón de cosas, algunas de las cuales están integradas en Java, otras no. Los requisitos más específicos ayudarían mucho aquí.
skaffman

Respuestas:

138

Puede hacer uso de java.net.URLy / o 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);
    }
}

Consulte también el sencillo tutorial de Oracle sobre el tema. Sin embargo, es un poco detallado. Para terminar con un código menos detallado, es posible que desee considerar Apache HttpClient en su lugar.

Por cierto: si su siguiente pregunta es "¿Cómo procesar el resultado HTML?", Entonces la respuesta es " Use un analizador HTML . No, no use expresiones regulares para esto ".

Ver también:

BalusC
fuente
@BalusC: Gracias. Haciendo algunos estudios a partir de los enlaces que proporcionaste. por cierto, ¿conoces alguna alternativa mejor a curl en java, que proporcione la misma funcionalidad que curl? Gracias de nuevo.
moshfiqur
7
Como se mencionó, HttpClient es "la mejor alternativa". De hecho, puede hacer todo con URLConnection, pero debe conocer y comprender las especificaciones HTTP. Por cierto, no intente comparar PHP con Java. Es como manzanas y naranjas. Para evitar problemas / confusiones, olvídese de PHP y dé una nueva visión a Java. Es un idioma con una ideología completamente diferente. PD: Yo hago ambas cosas, así que lo digo por experiencia.
BalusC
Como esta y otras personas han mencionado, use HttpClient. Realmente recomiendo evitar el uso de libcurl, debe asegurarse de agrupar la biblioteca nativa para cada plataforma que desee admitir y, tarde o temprano, alguien se quejará de que no funciona en su antiguo power mac o estación de trabajo SGI.
vickirk
¿no crees? El bloque de captura siempre se ve bien con el bloque de prueba: D
Muhammad Suleman
Ahh ... ahora lo tengo. puede usar este tipo de código donde necesitaremos try / catch anidados. ¡Perdón mi error!
Muhammad Suleman
4

El objeto Runtime le permite ejecutar aplicaciones de línea de comandos externas desde Java y, por lo tanto, le permitiría usar cURL, sin embargo, como las otras respuestas indican, probablemente haya una mejor manera de hacer lo que está tratando de hacer. Si todo lo que quiere hacer es descargar un archivo, el objeto URL funcionará muy bien.

mjh2007
fuente
3

Curl es un programa que no es Java y debe proporcionarse fuera de su programa Java.

Puede obtener fácilmente gran parte de la funcionalidad utilizando Jakarta Commons Net , a menos que necesite alguna funcionalidad específica como "reanudar la transferencia" (que es tedioso de codificar por su cuenta)

Thorbjørn Ravn Andersen
fuente
Bonito, pero Commons Net va un poco (demasiado) más allá de curl.
BalusC
2

Use Runtime para llamar a Curl. Este código funciona tanto para Ubuntu como para 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
fuente