Wie verwende ich cURL in Java?

89

Ich bin ein Neuling in Java und wollte Curl in Java verwenden. Was ist meine Frage ist Curl in Java integriert oder ich muss es von einer Quelle eines Drittanbieters installieren, um mit Java zu verwenden. Wenn ja, wie man Curl in Java installiert. Ich habe lange gegoogelt, aber keine Hilfe gefunden. Hoffe, jemand kann mir da draußen helfen.

Danke im Voraus.

Moshfiqur
quelle
@skaffman: Noch nichts. Ich bin ein PHP-Programmierer, der kürzlich Java ausprobiert. Natürlich bin ich es sehr gewohnt, mich zu kräuseln. Während ich als Anfänger an Java arbeite, kommt mir diese Frage in den Sinn, immer noch aus Neugier, aber ich bin mir sicher, dass ich sie in naher Zukunft brauchen werde. Wenn jemand eine bessere Alternative für Curl in Java kennt, dann teilen Sie diese bitte auch mit. Es wird sehr sehr hilfreich sein. Vielen Dank.
Moshfiqur
1
Ganz in der Nähe von stackoverflow.com/questions/116650/curl-equivalent-in-java
Pascal Thivent
Ich frage, weil CURL eine ganze Reihe von Sachen macht, von denen einige in Java integriert sind, andere nicht. Spezifischere Anforderungen würden hier sehr helfen.
Skaffman

Antworten:

136

Sie können verwenden java.net.URLund / oder 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);
    }
}

Siehe dazu auch der einfache Anleitung von Oracle zu dem Thema. Es ist jedoch ein bisschen ausführlich. Um weniger ausführlichen Code zu erhalten, sollten Sie stattdessen Apache HttpClient in Betracht ziehen .

Übrigens: Wenn Ihre nächste Frage "Wie verarbeitet man ein HTML-Ergebnis?" Lautet, lautet die Antwort " Verwenden Sie einen HTML-Parser . Nein, verwenden Sie hierfür keinen regulären Ausdruck .".

Siehe auch:

BalusC
quelle
@ BalusC: Danke. Führen Sie einige Studien über die von Ihnen angegebenen Links durch. Übrigens, kennen Sie eine bessere Alternative zu Curl in Java, die die gleiche Funktionalität wie Curl bietet? Danke noch einmal.
Moshfiqur
6
Wie bereits erwähnt, ist HttpClient "die bessere Alternative". Sie können in der Tat alles damit machen URLConnection, Sie müssen jedoch die HTTP-Spezifikationen kennen und verstehen. Versuchen Sie übrigens nicht, PHP mit Java zu vergleichen. Es ist wie mit Äpfeln und Orangen. Um Selbstprobleme / Verwirrungen zu vermeiden, vergessen Sie lieber PHP und werfen Sie einen neuen Blick auf Java. Es ist eine Sprache mit einer ganz anderen Ideologie. PS: Ich mache beides, also erzähle ich aus Erfahrung.
BalusC
Wie dies und andere erwähnt haben, verwenden Sie HttpClient. Ich würde wirklich empfehlen, die Verwendung von libcurl zu vermeiden. Sie müssen sicherstellen, dass Sie die native Bibliothek für jede Plattform bündeln, die Sie unterstützen möchten, und früher oder später wird sich jemand beschweren, dass dies auf seinem alten Power Mac oder seiner SGI-Workstation nicht funktioniert.
Vickirk
Glaubst du nicht, Catch Block sieht immer gut aus mit Try Block: D
Muhammad Suleman
Ahh ... jetzt habe ich es verstanden. Sie können diese Art von Code verwenden, wenn wir verschachtelte try / catch benötigen. Entschuldigung, mein Fehler!
Muhammad Suleman
4

Mit dem Runtime- Objekt können Sie externe Befehlszeilenanwendungen von Java aus ausführen und daher cURL verwenden, da die anderen Antworten darauf hinweisen, dass es wahrscheinlich eine bessere Möglichkeit gibt, das zu tun, was Sie versuchen. Wenn Sie nur eine Datei herunterladen möchten, funktioniert das URL-Objekt hervorragend.

mjh2007
quelle
4

Verwenden Sie Runtime , um Curl aufzurufen. Dieser Code funktioniert sowohl für Ubuntu als auch für 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
quelle
3

Curl ist ein Nicht-Java-Programm und muss außerhalb Ihres Java-Programms bereitgestellt werden.

Mit Jakarta Commons Net können Sie problemlos einen Großteil der Funktionen abrufen , es sei denn, Sie benötigen bestimmte Funktionen wie "Wiederaufnahme der Übertragung" (was für den eigenen Code mühsam ist).

Thorbjørn Ravn Andersen
quelle
Schön, aber Commons Net geht ein bisschen (zu viel) weiter als Curl.
BalusC