[英]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.