Я пытаюсь войти в Zabbix, используя Zabbix API и клиент Jersey. это должно быть просто, это запрос HTTP Post, с загнутым это так:Вход пользователя Zabbix API с клиентом Джерси
curl -i -X POST -H 'Content-Type: application/json-rpc' -d '{"jsonrpc":"2.0","method":"user.login","id":1,"params":{"user":"my_uname","password":"my_pass"}}' http://company_host/zabbix/api_jsonrpc.php
HTTP/1.1 200 OK
Date: Wed, 02 Sep 2015 18:06:51 GMT
Server: Apache/2.4.7 (Ubuntu)
X-Powered-By: PHP/5.5.9-1ubuntu4.3
Content-Length: 68
Content-Type: application/json
{"jsonrpc":"2.0","result":"53a3e46343b5d29eb11678be2775df9b","id":1}
В Java коде, я попытался использовать Джерси клиента:
JSONObject mainJObj = new JSONObject();
JSONObject paramJObj = new JSONObject();
mainJObj.put("jsonrpc", "2.0");
mainJObj.put("method", "user.login");
mainJObj.put("id", "1");
paramJObj.put("user", "my_uname");
paramJObj.put("password", "my_pass");
mainJObj.put("params", paramJObj);
Client client = Client.create();
WebResource webResource = client.resource("http://company_host/zabbix/api_jsonrpc.php");
ClientResponse response = webResource.type("application/json").post(ClientResponse.class, mainJObj);
if (response.getStatus() != 200) {
throw new RuntimeIOException("Failed : HTTP error code: " + response.getStatus());
}
String token = response.getEntity(String.class);
System.out.println("Authentication token: " + token);
ответ возврата 200 OK, но сущность всегда пусто.
затем я перешел на HTTPClient, она работала правильно:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://company_host/zabbix/api_jsonrpc.php");
StringEntity input = new StringEntity(mainJObj.toString());
input.setContentType("application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
if (response.getStatusLine().getStatusCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatusLine().getStatusCode());
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
это распечатать ответ от сервера:
{"jsonrpc":"2.0","result":"53a3e46343b5d29eb11678be2775df9b","id":"1"}
почему Джерси клиент не может получить ответ от сервера?
Это совершенно нормально, чтобы принять правильный ответ, даже если это ты (ОП), который ответил. Таким образом, для будущих посетителей гораздо понятнее, что это правильное решение. – fvu