如何在 Java 中使用 cURL?

Posted

技术标签:

【中文标题】如何在 Java 中使用 cURL?【英文标题】:How to use cURL in Java? 【发布时间】:2011-02-04 22:19:40 【问题描述】:

我是 java 新手,想在 java 中使用 curl。我的问题是 curl 内置在 java 中,或者我必须从任何 3rd 方源安装它才能与 Java 一起使用。如果是这样,如何在 java 中安装 curl。我已经在谷歌上搜索了很长时间,但没有找到任何帮助。希望任何人都可以帮助我。

提前致谢。

【问题讨论】:

@skaffman:还没有。我是一名 php 程序员,最近正在尝试 java。所以很自然地我很习惯卷曲。所以,作为一个新手在学习java时,这个问题出现在我的脑海中,仍然是出于好奇,但我相信在不久的将来我会需要它。如果有人知道java中curl的任何更好的选择,那么也请分享。这将非常有帮助。谢谢。 非常接近***.com/questions/116650/curl-equivalent-in-java 我问是因为 CURL 做了一大堆东西,其中一些是 Java 内置的,有些不是。更具体的要求在这里会有很大帮助。 【参考方案1】:

您可以使用java.net.URL 和/或java.net.URLConnection

URL url = new URL("https://***.com");

try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) 
    for (String line; (line = reader.readLine()) != null;) 
        System.out.println(line);
    

另请参阅有关该主题的Oracle's simple tutorial。然而,它有点冗长。为了减少冗长的代码,您可能需要考虑使用Apache HttpClient。

顺便说一句:如果您的下一个问题是“如何处理 html 结果?”,那么答案是“Use a HTML parser.No, don't use regex for this.”。

另见:

How to use java.net.URLConnection to fire and handle HTTP requests? What are the pros and cons of the leading Java HTML parsers?

【讨论】:

@BalusC:谢谢。从您提供的链接中进行一些研究。顺便说一句,你知道在 java 中有什么更好的 curl 替代方法,它可以提供与 curl 相同的功能吗?再次感谢。 如前所述,HttpClient 是“更好的选择”。事实上,您可以使用URLConnection 做任何事情,但您还必须了解并理解 HTTP 规范。顺便说一句,不要试图将 PHP 与 Java 进行比较。这就像苹果和橘子。为了避免自我困扰/困惑,宁可忘记 PHP,重新审视 Java。这是一种具有完全不同意识形态的语言。 PS:我两者都做,所以我根据经验来判断。 正如this和其他人提到的那样使用HttpClient。我真的建议避免使用 libcurl,你必须确保为你想要支持的每个平台捆绑本地库,迟早有人会抱怨它在他们旧的 power mac 或 SGI 工作站上不起作用。 你不觉得吗,catch 块与 try 块一起看起来总是不错:D 啊……现在我明白了。您可以在需要嵌套 try/catch 的地方使用这种类型的代码。对不起我的错误!【参考方案2】:

有些人已经提到了HttpURLConnection、URL和URLConnection。如果您需要 curl 库为您提供的所有控制和额外功能(以及更多),我建议您使用 Apache's httpclient。

【讨论】:

【参考方案3】:

Runtime 对象允许您从 Java 执行外部命令行应用程序,因此允许您使用 cURL,但是其他答案表明可能有更好的方法来做您想做的事情。如果您只想下载一个文件,那么 URL 对象会很好用。

【讨论】:

【参考方案4】:

使用标准 java 库,我建议查看 HttpUrlConnection 类 http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html

它可以处理 curl 在建立连接时可以做的大部分事情。 您对流的处理取决于您。

【讨论】:

【参考方案5】:

Curl 是一个非 Java 程序,必须在您的 Java 程序之外提供。

您可以使用Jakarta Commons Net 轻松获得大部分功能,除非您需要某些特定功能,例如“简历传输”(您自己编写代码很乏味)

【讨论】:

不错,但 Commons Net 比 curl 走得更远(太多了)。【参考方案6】:

使用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);

【讨论】:

要在 java 11 中成功运行,字符串数组应该初始化如下code String[] commands = "curl", "-X", "GET", "checkip.amazonaws.com" ; code

以上是关于如何在 Java 中使用 cURL?的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab CI/CD 如何在管道中捕获 curl 响应

如何从java访问github graphql API而不在java中运行curl命令

如何从java访问github graphql API而不在java中运行curl命令

如何使用curl在php中调试get请求

Linux - 如何在 cURL 中使用函数? [复制]

如何在 HTTP/1.1 中使用 PHP cURL