简体   繁体   English

将Curl转换为Java等效项

[英]Convert Curl to Java equivalent

I'm working with New Relic REST API for the first time, I have a curl command: 我第一次使用New Relic REST API ,我有一个curl命令:

curl -X GET 'https://api.newrelic.com/v2/applications/appid/metrics/data.json' \
     -H 'X-Api-Key:myApiKey' -i \
     -d 'names[]=EndUser/WebTransaction/WebTransaction/JSP/index.jsp' 

I want to send this command in a java servlet and get a JSON object from the response ready for parsing, What is the best solution? 我想在java servlet中发送此命令并从响应中获取JSON对象以备解析,什么是最佳解决方案?

HttpURLConnection? HttpURLConnection的?

Apache httpclient? Apache httpclient?

I've tried a few different solutions, but nothing has worked so far and most examples I could find are using the depreciated DefaultHttpClient 我已经尝试了一些不同的解决方案,但到目前为止没有任何工作,我能找到的大多数示例都使用了折旧的DefaultHttpClient

Here is an example of one of my attempts: 以下是我尝试过的一个示例:

 String url = "https://api.newrelic.com/v2/applications.json";
        HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("X-Api-Key", "myApiKey");
        conn.setRequestMethod("GET");
        JSONObject names =new JSONObject();

        try {
            names.put("names[]=", "EndUser/WebTransaction/WebTransaction/JSP/index.jsp");
        } catch (JSONException e) {
            e.printStackTrace();
        }
        OutputStreamWriter wr= new OutputStreamWriter(conn.getOutputStream());
        wr.write(names.toString());

Edit 编辑

I've modified the code a bit, it's working now thanks. 我已经修改了一下代码,现在正在工作,谢谢。

String names = "names[]=EndUser/WebTransaction/WebTransaction/JSP/index.jsp";
String url = "https://api.newrelic.com/v2/applications/myAppId/metrics/data.json";
String line;

try (PrintWriter writer = response.getWriter()) {

            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();

            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("X-Api-Key", "myApiKey");
            conn.setRequestMethod("GET");
            conn.setDoOutput(true);
            conn.setDoInput(true);

            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(names);
            wr.flush();


            BufferedReader reader = new BufferedReader(new
                    InputStreamReader(conn.getInputStream()));
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
                writer.println(HTML_START + "<h2> NewRelic JSON Response:</h2><h3>" + line + "</h3>" + HTML_END);
            }
            wr.close();
            reader.close();
        }catch(MalformedURLException e){

            e.printStackTrace();
        }

curl -d sends whatever you specify without formatting it in any way. curl -d发送您指定的任何内容,而不以任何方式格式化它。 Just send the string names[]=EndUser/... in the OutputStream, without wrapping it in a JSONObject. 只需在OutputStream中发送字符串names[]=EndUser/... ,而不将其包装在JSONObject中。 Don't forget to call wr.flush() after writing the string. 写完字符串后不要忘记调用wr.flush() And of course, after that, you need to get the InputStream and start reading from it (I only mention this because it's not in your snippet). 当然,在那之后,你需要获取InputStream并开始从中读取(我只提到它,因为它不在你的代码片段中)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM