Come usare cURL in Java?


92

Sono un principiante in java e volevo usare curl in java. Qual è la mia domanda è curl integrato in java o devo installarlo da qualsiasi fonte di terze parti da utilizzare con Java. In tal caso, come installare curl in java. Ho cercato su Google per molto tempo ma non ho trovato alcun aiuto. Spero che qualcuno possa aiutarmi là fuori.

Grazie in anticipo.


@skaffman: Niente ancora. Sono un programmatore PHP che sta provando di recente java. Quindi, naturalmente, sono molto abituato ad arricciarmi. Quindi, mentre lavoravo su java da principiante, questa domanda mi viene in mente, ancora per curiosità ma sono sicuro che nel prossimo futuro ne avrò bisogno. Se qualcuno conosce un'alternativa migliore di curl in java, per favore condividi anche. Sarà molto molto utile. Grazie.
moshfiqur


Lo chiedo perché CURL fa un sacco di cose, alcune delle quali sono integrate in Java, altre no. Requisiti più specifici aiuterebbero molto qui.
skaffman

Risposte:


138

Puoi utilizzare java.net.URLe / 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);
    }
}

Vedi anche il semplice tutorial di Oracle sull'argomento. Tuttavia è un po 'prolisso. Per finire con un codice meno dettagliato, potresti prendere in considerazione invece Apache HttpClient .

A proposito: se la tua prossima domanda è "Come elaborare il risultato HTML?", La risposta è " Usa un parser HTML . No, non usare regex per questo .".

Guarda anche:


@BalusC: Grazie. Facendo alcuni studi dai link che hai fornito. a proposito, conosci qualcosa di migliore alternativa di curl in java, che fornirà le stesse funzionalità come curl? Grazie ancora.
moshfiqur

7
Come accennato, HttpClient è "l'alternativa migliore". In effetti puoi fare tutto con URLConnection, devi ancora conoscere e capire le specifiche HTTP. A proposito, non provare a confrontare PHP con Java. È come le mele e le arance. Per evitare problemi personali / confusioni, dimentica piuttosto PHP e dai una nuova visione a Java. È una lingua con un'ideologia completamente diversa. PS: faccio entrambe le cose, quindi lo dico per esperienza.
BalusC

Come questa e altre persone hanno menzionato, usa HttpClient. Consiglio vivamente di evitare l'uso di libcurl, devi assicurarti di raggruppare la libreria nativa per ogni piattaforma che desideri supportare e prima o poi qualcuno si lamenterà del fatto che non funziona sul loro vecchio power mac o workstation SGI.
vickirk

non pensi, il blocco di cattura sembra sempre bello con il blocco di prova: D
Muhammad Suleman

Ahh ... ora ho capito. puoi usare questo tipo di codice dove avremo bisogno di try / catch annidati. scusa, errore mio!
Muhammad Suleman


4

L' oggetto Runtime consente di eseguire applicazioni a riga di comando esterne da Java e quindi consentirebbe di utilizzare cURL, tuttavia, poiché le altre risposte indicano che probabilmente esiste un modo migliore per fare ciò che si sta tentando di fare. Se tutto ciò che vuoi fare è scaricare un file, l'oggetto URL funzionerà benissimo.



3

Curl è un programma non Java e deve essere fornito al di fuori del programma Java.

Puoi facilmente ottenere gran parte delle funzionalità utilizzando Jakarta Commons Net , a meno che non ci siano alcune funzionalità specifiche come "riprendi il trasferimento" di cui hai bisogno (che è noioso da programmare da solo)


Bello, ma Commons Net va un po '(troppo) oltre il curl.
BalusC

2

Usa Runtime per chiamare Curl. Questo codice funziona sia per Ubuntu che per 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);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.