Como usar cURL em Java?

90

Eu sou um novato em java e queria usar curl em java. Qual é a minha dúvida é curl embutido em java ou eu tenho que instalá-lo de qualquer fonte de terceiros para usar com Java. Se sim, como instalar o curl em java. Eu tenho pesquisado por um longo tempo, mas não encontrei qualquer ajuda. Espero que alguém possa me ajudar aí.

Desde já, obrigado.

moshfiqur
fonte
@skaffman: Nada ainda. Sou um programador de PHP que recentemente experimentou o java. Então, naturalmente, estou muito acostumado a enrolar. Então, enquanto trabalho em java como um novato, esta questão surge em minha mente, ainda por curiosidade, mas tenho certeza que em um futuro próximo irei precisar. Se alguém souber de alguma alternativa melhor de curl em java, compartilhe também. Será muito útil. Obrigado.
moshfiqur
Eu pergunto porque o CURL faz um monte de coisas, algumas das quais são integradas ao Java, outras não. Requisitos mais específicos ajudariam muito aqui.
Skaffman

Respostas:

136

Você pode fazer uso de java.net.URLe / ou 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);
    }
}

Veja também o tutorial simples do Oracle sobre o assunto. No entanto, é um pouco prolixo. Para terminar com um código menos detalhado, você pode considerar o Apache HttpClient .

A propósito: se sua próxima pergunta é "Como processar o resultado HTML?", A resposta é " Use um analisador HTML . Não, não use regex para isso .".

Veja também:

BalusC
fonte
@BalusC: Obrigado. Fazendo alguns estudos a partir dos links que você forneceu. btw, você conhece alguma alternativa melhor do curl em java, que fornecerá a mesma funcionalidade do curl? Obrigado novamente.
moshfiqur
6
Como mencionado, HttpClient é "a melhor alternativa". Na verdade, você pode fazer tudo com o URLConnection, mas ainda precisa conhecer e compreender as especificações HTTP. A propósito, não tente comparar PHP com Java. É como maçãs e laranjas. Para evitar auto-problemas / confusões, esqueça o PHP e dê uma nova visão ao Java. É uma linguagem com uma ideologia totalmente diferente. PS: Eu faço os dois, então conto por experiência própria.
BalusC de
Como esta e outras pessoas mencionaram, use HttpClient. Eu realmente recomendo evitar o uso de libcurl, você tem que certificar-se de empacotar a biblioteca nativa para cada plataforma que deseja oferecer suporte e, mais cedo ou mais tarde, alguém reclamará que não funciona em seu antigo power mac ou estação de trabalho SGI.
vickirk,
você não acha, catch block sempre fica bem com try block: D
Muhammad Suleman
Ahh ... agora entendi. você pode usar este tipo de código onde precisaremos de try / catch aninhados. Desculpe meu erro!
Muhammad Suleman
4

O objeto Runtime permite que você execute aplicativos de linha de comando externos a partir de Java e, portanto, permite que você use cURL, entretanto, como as outras respostas indicam que provavelmente há uma maneira melhor de fazer o que você está tentando fazer. Se tudo o que você deseja fazer é baixar um arquivo, o objeto URL funcionará muito bem.

mjh2007
fonte
3

Curl é um programa não Java e deve ser fornecido fora de seu programa Java.

Você pode obter facilmente muitas das funcionalidades usando Jakarta Commons Net , a menos que haja alguma funcionalidade específica como "retomar a transferência" de que você precisa (que é entediante codificar por conta própria)

Thorbjørn Ravn Andersen
fonte
Boa, mas Commons Net vai um pouco (demais) além do curl.
BalusC
2

Use o Runtime para chamar o Curl. Este código funciona para Ubuntu e 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
fonte