带有XGET参数的Java中的cURL请求

时间:2016-10-05 11:31:17

标签: java curl

我喜欢执行像

这样的cURL命令
curl -s -XGET 'http://localhost:xxx/h*/_count?q=*&pretty'

在我的java应用程序中(当然是在linux机器上运行)并将结果保存在String中。 怎么做得好? Thisthis解决方案不起作用。以下是我的尝试和结果,直到现在,基于解决方案并适应我的情况:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;


public class SyncStatus
{

public static void main(String[] args)
{      
    //Link 1   
    Process process;
    try
    {
        process = Runtime.getRuntime().exec( "curl -s -XGET 'http://localhost:xxxx/h*/_count?q=*&pretty'");
        System.out.println(process.waitFor());
        System.out.println(process.getErrorStream());
        System.out.println(process.getInputStream());


        BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String result="";
        String line=null;
        while((line=input.readLine())!=null)
        {
            result+=line;
            System.out.println("here: "+line);
        }
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (InterruptedException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //Results:
    //1 (the Errocode)
    //java.lang.UNIXProcess$ProcessPipeInputStream@2d3584f9
    //java.lang.UNIXProcess$ProcessPipeInputStream@14ad0e9f


    //Link 2
    System.out.println("Next try:");
    List list = new ArrayList();
    list.add("curl");
    list.add("-s");
    list.add("-X");
    list.add("GET");
    list.add("http://localhost:9200/h*/_count?q=*&pretty");
    ProcessBuilder pb = new ProcessBuilder(list);
    try
    {
        pb.redirectErrorStream();
        process = pb.start();
        System.out.println(process.getErrorStream());
        System.out.println(process.getInputStream());
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //Results:
    //java.lang.UNIXProcess$ProcessPipeInputStream@57dd065c
    //java.lang.UNIXProcess$ProcessPipeInputStream@6fccaf14
}
}

注意:在shell中评估命令时,我会得到所需的结果。

1 个答案:

答案 0 :(得分:0)

最后我自己找到了解决方案。

首先我收缩了命令:curl 'http://localhost:xxxx/h*/_count'。在这种情况下,它具有相同的结果。

使用以下java代码,我能够阅读“网页”的内容:

URL oracle = new URL("http://localhost:9200/h*/_count");
BufferedReader in = new BufferedReader(new InputStreamReader(oracle.openStream()));

String inputLine;
while((inputLine = in.readLine()) != null)
    System.out.println(inputLine);
in.close();

Source