Windows环境下Java中执行curl命令的等效实现方法
Windows系统Java环境中curl命令的等效实现
嗨,针对你在Windows下想实现类似Linux上调用curl的需求,我给你两种靠谱的方案:
方案一:直接调用Windows的cmd执行curl
Windows里没有/bin/sh,对应的系统命令行工具是cmd.exe,参数用/c来执行后续的命令。如果你的Windows系统是Win10及以上,默认已经自带curl工具了,直接把你原来的代码改成下面这样就行:
def proc = ["cmd.exe", "/c", "curl https://stackoverflow.com"] proc.waitFor() StringBuffer outputStream = new StringBuffer() proc.waitForProcessOutput(outputStream, System.err) String output = outputStream.toString()
注意点:
- 如果是Win7及以下系统,默认没有curl,你要么手动安装curl并加到系统环境变量里,要么指定curl的完整路径(比如
"C:\\path\\to\\curl.exe https://stackoverflow.com")。
方案二:用Java原生API实现(更推荐,不依赖系统环境)
调用外部命令容易受系统环境影响,比如用户没装curl就跑不起来。用Java自带的HTTP工具类来实现,跨平台还更稳定。比如用Java 11+自带的HttpClient,代码示例如下:
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.io.IOException; public class CurlEquivalent { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://stackoverflow.com")) .build(); try { HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); String output = response.body(); System.out.println(output); // 这里可以处理输出内容,和你原来的逻辑一致 } catch (IOException | InterruptedException e) { e.printStackTrace(); } } }
如果是用Groovy的话,写法会更简洁:
import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse def client = HttpClient.newHttpClient() def request = HttpRequest.newBuilder() .uri(URI.create("https://stackoverflow.com")) .build() def response = client.send(request, HttpResponse.BodyHandlers.ofString()) def output = response.body() println(output)
这种方式不需要依赖外部的curl工具,只要你的Java版本符合要求(Java11+),在任何系统上都能跑,稳定性更高~
内容的提问来源于stack exchange,提问作者MIGHTDUY
相关产品推荐
相关产品推荐

