2016-05-05 12 views
-1

Ich bearbeite eine Java-Anwendung und versuche, auf eine sichere API von Drittanbietern zuzugreifen. Es gibt zwei String-Variablen, die übergeben werden müssen, und eine ID und ein Token für den sicheren Zugriff. Der folgende Code verwendet Maven. Ich versuche den Code für nur Java zu optimieren.Java - Zugriff auf Secure HTTPS API von Drittanbietern

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"; 

// Dies ist der Teil des Codes, den ich versuche, edi. dies meines Wissens // Maven Codierung HttpUriRequest HttpGet = new HttpGet (Domain + "/ v1/Preise accountId =" + account_id + "& Instrumente =" + Instrumente); httpGet.setHeader (neuer BasicHeader ("Authorization", "Bearer" + 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

Können Sie Ihren Code auf eine minimale Menge reduzieren, um das Problem zu reproduzieren! – evolutionxbox

+0

Ich versuche eine Verbindung zu https://stream-fxpractice.oanda.com herzustellen. Da es sich um eine sichere Anmeldung für den Zugriff auf diese API handelt, gibt es einen String access_token = "ACCESS-TOKEN" und String account_id = "1234567", der in der Kopfzeile übergeben werden muss, um die Anmeldung zu bestätigen. Ich versuche, dies in Java ohne Maven zu tun .... sie verwenden "HTTPClient" und "HttpClientBuilder", die Maven-Klassen sind. Ich möchte nur eine direkte URLConnection verwenden, um auf https://stream-fxpractice.oanda.com ohne eine Maven Architype zuzugreifen. –

+0

Warum ist das mit "Maven" markiert? – bhspencer

Antwort

0

Es scheint, wie Sie fragen, wie die Standard-Bibliothek zu verwenden, anstatt die Abhängigkeiten und die account_id/Access-Token als Teil des Grund Auth-Header kodieren. Ich würde vorschlagen, HttpURLConnection zu verwenden. Es ist als Teil der Java-Standardbibliothek enthalten. Versuchen Sie Folgendes:

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

Ja. Ich bin ziemlich vertraut mit Java-Programmierung, und ich habe nicht mit Netzwerken mit der HttpUrlConnection-Klasse gearbeitet. Ich denke, ich habe meine Fragen rückwärts gestellt. Danke für deine Hilfe, Jon. –