如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何从java访问github graphql API而不在java中运行curl命令