2016-05-05 2 views
-1

Я редактирую приложение Java и пытаюсь получить доступ к защищенному стороннему API. Необходимо передать две переменные String, а также идентификатор и токен для безопасного доступа. В приведенном ниже коде используется Maven. Я пытаюсь настроить код только для Java.Java - доступ к защищенному API сторонних разработчиков HTTPS

public class JavaApiStreaming { 
public static void main (String[]args) throws IOException { 

    HttpClient httpClient = HttpClientBuilder.create().build(); 

    try { 

     // Set these variables to whatever personal ones are preferred 
     String domain = "https://stream-fxpractice.oanda.com";// trying to access this api 
     String access_token = "ACCESS-TOKEN"; //using this token 
     String account_id = "1234567"; //using this ID 
     String instruments = "EUR_USD,USD_JPY,EUR_JPY"; 

// Это часть кода, который я пытаюсь использовать edi. Насколько мне известно, это // maven coding HttpUriRequest httpGet = new HttpGet (domain + "/ v1/prices? accountId =" + account_id + "& instruments =" + tools); httpGet.setHeader (новый BasicHeader («Авторизация», «Носитель» + access_token));

 System.out.println("Executing request: " + httpGet.getRequestLine()); 

     HttpResponse resp = httpClient.execute(httpGet); 
     HttpEntity entity = resp.getEntity(); 

     if (resp.getStatusLine().getStatusCode() == 200 && entity != null) { 
      InputStream stream = entity.getContent(); 
      String line; 
      BufferedReader br = new BufferedReader(new InputStreamReader(stream)); 

      while ((line = br.readLine()) != null) { 

       Object obj = JSONValue.parse(line); 
       JSONObject tick = (JSONObject) obj; 

       // unwrap if necessary 
       if (tick.containsKey("tick")) { 
        tick = (JSONObject) tick.get("tick"); 
       } 

       // ignore heartbeats 
       if (tick.containsKey("instrument")) { 
        System.out.println("-------"); 

        String instrument = tick.get("instrument").toString(); 
        String time = tick.get("time").toString(); 
        double bid = Double.parseDouble(tick.get("bid").toString()); 
        double ask = Double.parseDouble(tick.get("ask").toString()); 

        System.out.println(instrument); 
        System.out.println(time); 
        System.out.println(bid); 
        System.out.println(ask); 
       } 
      } 
     } else { 
      // print error message 
      String responseString = EntityUtils.toString(entity, "UTF-8"); 
      System.out.println(responseString); 
     } 

    } finally { 
     httpClient.getConnectionManager().shutdown(); 
    } 
} 

}

+0

Можете ли вы уменьшить свой код до минимальной суммы, чтобы воспроизвести проблему! – evolutionxbox

+0

Я пытаюсь подключиться к https://stream-fxpractice.oanda.com. Поскольку это безопасный вход для доступа к этому api, существует строка доступа access_token = "ACCESS-TOKEN" и String account_id = "1234567", которая должна быть передана в заголовке для проверки входа. Я пытаюсь сделать это на Java без maven .... они используют «HTTPClient» и «HttpClientBuilder», которые являются классами maven. Я просто хочу использовать прямой URLConnection для доступа к https://stream-fxpractice.oanda.com без maven architype. –

+0

Почему это помечено знаком «maven»? – bhspencer

ответ

0

Похоже, вы спрашиваете, как использовать стандартную библиотеку вместо каких-либо зависимостей и кодировать маркер account_id/доступа как часть основного заголовка AUTH. Я бы предложил использовать HttpURLConnection. Он включен как часть стандартной библиотеки Java. Попробуйте следующее:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); 
String encoded = Base64.encode(account_id+":"+access_token); 
connection.setRequestProperty("Authorization", "Basic "+encoded); 
+0

Да. Я довольно хорошо знаком с Java Programming, и я не работал с сетью, используя класс HttpUrlConnection. Наверное, я задал свои вопросы назад. Спасибо тебе за помощь, Джон. –

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