2016-05-20 6 views
1

Я хочу сделать запрос POST, чтобы получить токен из Openstack. Я могу сделать это с помощью аддона на Mozilla, введя URL: «HTTP: //*******/v2.0/tokens» и данные,Как сделать RESTful java-клиент для отправки запроса GET/POST на Openstack?

{ 
    "auth": { 
     "tenantName": "admin", 
     "passwordCredentials": { 
      "username": "xxxxxx", 
      "password": "xxxxxx" 
     } 
    } 
} 

Как сделать так же по программе JAVA? До сих пор я пробовал следующий код, но безуспешно.

package rest.openstack; 

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.net.HttpURLConnection; 
    import java.net.MalformedURLException; 
    import java.net.URL; 

    public class NetClientGet { 

     // http://localhost:8080/RESTfulExample/json/product/get 
     public static void main(String[] args) { 

      try { 

      URL url = new URL("http://***.**.**.**:5000/v2.0/tenants/"); //url for openstack 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestMethod("GET"); 
      conn.setRequestProperty("Accept", "application/json"); 

      if (conn.getResponseCode() != 200) { 
       throw new RuntimeException("Failed : HTTP error code : " 
         + conn.getResponseCode()); 
      } 

      BufferedReader br = new BufferedReader(new InputStreamReader(
       (conn.getInputStream()))); 

      String output; 
      System.out.println("Output from Server .... \n"); 
      while ((output = br.readLine()) != null) { 
       System.out.println(output); 
      } 

      conn.disconnect(); 

      } catch (MalformedURLException e) { 

      e.printStackTrace(); 

      } catch (IOException e) { 

      e.printStackTrace(); 

      } 

     } 

    } 
+0

Почему бы не использовать один из Java SDK из https://wiki.openstack.org/wiki/SDKs#Java –

ответ

0

Я предпочитаю использовать API Джерси для звонков REST;

Ниже следует получить токен для указанного пользователя, который находится в вашем объекте POST;

String postEntity = "yourJson"; 
JerseyClient jerseyClient = JerseyClientBuilder.createClient(); 
JerseyWebTarget jerseyTarget = jerseyClient.target("http://***.**.**.**:****/v2.0/tokens"); 
JerseyInvocation.Builder jerseyInvocation = jerseyTarget.request("application/json"); 
jerseyInvocation.header("Context-type", "application/json"); 
Response response = jerseyInvocation.post(Entity.entity(postEntity, MediaType.APPLICATION_JSON), Response.class); 

Затем вы можете разобрать ваш объект с некоторыми из синтаксического анализа, такие как com.google.gson.JsonParser.

JsonParser jsonParser = new JsonParser(); 
String responseEntity = jsonParser.parse(response.readEntity(String.class)); 

После этого для каждого запроса, вам необходимо применить X-Auth-токен в ваш заголовок REST для аутентификации услуг.

jerseyInvocation.header("X-Auth-Token",token); 

 Смежные вопросы

  • Нет связанных вопросов^_^