java - 哪个是在 windows java 中执行 curl 命令的等效命令?
问题描述
类似这样的等效命令我不知道哪种是调用批处理命令的正确形式
def proc =["/bin/sh", "-c","curl https://stackoverflow.com"]
proc.waitFor()
StringBuffer outputStream = new StringBuffer()
proc.waitForProcessOutput(outputStream, System.err)
String output = outputStream.toString()
解决方案
你为什么不考虑改用 java.net.URL 呢?
示例代码在这里
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Hello{
public static void main(String []args){
try
{
URL url = new URL("http://stackoverflow.com");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"))) {
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
}
}
catch (Exception e)
{
System.out.println("error occured");
}
}
}
相反,如果您想从 java 调用 curl 命令,请使用以下命令
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class ShellFromJava {
public static ArrayList<String> command(final String cmdline,
final String directory) {
try {
Process process =
new ProcessBuilder(new String[] {"bash", "-c", cmdline})
.redirectErrorStream(true)
.directory(new File(directory))
.start();
ArrayList<String> output = new ArrayList<String>();
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ( (line = br.readLine()) != null )
output.add(line);
if (0 != process.waitFor())
return null;
return output;
} catch (Exception e) {
//Warning: doing this is no good in high-quality applications.
//Instead, present appropriate error messages to the user.
//But it's perfectly fine for prototyping.
return null;
}
}
public static void main(String[] args) {
testHandler("curl http://stackoverflow.com");
}
static void testHandler(String cmdline) {
ArrayList<String> output = command(cmdline, ".");
if (null == output)
System.out.println("\n\n\t\tCOMMAND FAILED: " + cmdline);
else
for (String line : output)
System.out.println(line);
}
}
推荐阅读
- mysql - (错误 1366 SQL)不正确的 DECIMAL 值 '()'
- chart.js - Chart.js 径向轴:是否可以在雷达图上使用多个轴?
- java - Project Euler Problem - 1 没有返回我期望的值
- c# - 当其中一个线程执行某些操作时,如何使用 SemaphoreSlim 释放所有线程?
- ffmpeg - 在ffmpeg中的音频之间多次插入随机静音
- oracle - APEX 交互式网格 - 行中的新行
- javascript - 使用多种可选类型时出现打字稿错误
- python - 如何键入采用通用数组的numpy函数
- streampipes - 在 AWS 云上托管 apache 流管道
- java - Java 微服务无法与 AWS Athena 客户端通信:Handshake_Failure