Я пытаюсь войти в Zabbix, используя Zabbix API и клиент Jersey. это должно быть просто, это HTTP-запрос Post, с curl он выглядит так:
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"}
почему клиент Джерси не может получить ответ от сервера?