如何在Java中使用cURL?

110

我想在Java中使用curl。Java内置了curl吗?还是我需要从第三方来源安装它以便在Java中使用?如果需要单独安装,如何安装?


@skaffman:目前还没有。我是一名PHP程序员,最近开始尝试Java。所以自然而然地,我非常习惯使用curl。因此,在作为新手工作时,这个问题出现在我的脑海中,仍然是出于好奇,但我相信在不久的将来我会需要它。如果有人知道Java中更好的curl替代方案,请也分享一下。这将非常非常有帮助。谢谢。 - moshfiqur
1
非常接近 https://dev59.com/23VD5IYBdhLWcg3wBWvd - Pascal Thivent
我之所以问这个问题,是因为CURL会执行很多操作,其中一些操作在Java中已经内置了,而另一些则没有。提供更具体的要求将对此有很大帮助。 - skaffman
7个回答

146

您可以利用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:谢谢。从你提供的链接中学习了一些知识。顺便问一下,你是否知道在Java中有没有更好的curl替代品,可以提供与curl相同的功能?再次感谢。 - moshfiqur
7
如上所述,HttpClient是“更好的选择”。事实上,您可以使用URLConnection完成所有操作,但您需要了解和理解HTTP规范。顺便说一下,不要试图将PHP与Java进行比较。这就像比较苹果和橙子。为避免自己的麻烦/困惑,最好忘记PHP,用全新的眼光看待Java。它是一种具有完全不同思想的语言。 PS:我都会,因此我从经验上告诉您。 - BalusC
正如其他人所提到的,使用HttpClient是一个不错的选择。我强烈建议避免使用libcurl,因为你必须确保为每个你想支持的平台捆绑本地库,而且迟早会有人抱怨它在他们的旧款Power Mac或SGI工作站上无法正常工作。 - vickirk
你不觉得,catch块和try块放在一起看起来总是很好看:D - Muhammad Suleman
啊...现在我明白了。你可以使用这种类型的代码,其中我们需要嵌套的try/catch。对不起,是我的错! - Muhammad Suleman
显示剩余4条评论

5

4

Runtime对象允许您从Java执行外部命令行应用程序,因此可以使用cURL,但正如其他答案所指出的那样,可能有更好的方法来实现您想要的功能。如果您只想下载文件,则URL对象将非常适合。


3

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);
}

1
为了在Java 11中成功运行这个程序,字符串数组应该按照以下方式进行初始化: code String[] commands = {"curl", "-X", "GET", "http://checkip.amazonaws.com"}; code - ricwambugu
java.io.IOException: 无法运行程序"curl": CreateProcess错误=2 - jsanmarb

1
将您的curl命令粘贴到curlconverter.com/java/中,它将使用java.net.URLjava.net.URLConnection将其转换为Java代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接