2017-07-10 4 views
2

Ich erstelle eine Anwendung, in der ich XML-Daten direkt (ohne Schlüsselwertpaar) an die API senden möchte. Die API benötigt eine Zertifizierungsauthentifizierung, die hier im Code erfolgt. Jetzt möchte ich die Daten an die gleiche URL senden. HierWie POST XML-Daten beim Aufruf von API über JAVA?

ist das, was ich tun möchte:

enter image description here Mein aktueller Code ist:

@Override 
    public String demoAPI(String xmlData) { 
     StringBuilder sb = new StringBuilder(); 
     String output=""; 
    try { 
     KeyStore clientStore = KeyStore.getInstance("PKCS12"); 
     clientStore.load(new FileInputStream(new File("path-to-pfx-file")), 
       "password".toCharArray()); 
     KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
     kmf.init(clientStore, "password".toCharArray()); 
     KeyManager[] kms = kmf.getKeyManagers(); 
     KeyStore trustStore = KeyStore.getInstance("JKS"); 
     trustStore.load(new FileInputStream("path-to-jks-file"), "password".toCharArray()); 
     TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
     tmf.init(trustStore); 
     TrustManager[] tms = tmf.getTrustManagers(); 
     final SSLContext sslContext = SSLContext.getInstance("TLS"); 
     sslContext.init(kms, tms, new SecureRandom()); 
     SSLContext.setDefault(sslContext); 
     HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE; 
     HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); 
     HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier); 
     URL url = new URL("URL"); 
     HttpsURLConnection con = (HttpsURLConnection) url.openConnection(); 
     con.setRequestMethod("GET"); 
     con.setConnectTimeout(100000); 
     con.setSSLSocketFactory(sslContext.getSocketFactory()); 
     con.connect(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     String line; 
     while ((line = br.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     br.close(); 
     System.out.println(sb.toString()); 
     output = sb.toString(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     output = e.getMessage(); 
    } 
    return output; 
} 

Während für gleiche URL, ich xmlData von Verfahren zu stellen. Wie kann ich das tun? Was soll ich nach con.setRequestMethod("POST"); im Code ändern?

+0

was ist passiert, als Sie versuchten? – user7294900

+0

Ich frage, wie man Daten nach con.setRequestMethod ("POST") POST; Angenommen, ich habe meine Methode folgendermaßen bearbeitet: public String demoAPI (String xmlData). Wie kann ich diese xmlData an diese URL senden? –

Antwort

0

Sie haben eine URL und Sie haben einige XML, um diese URL über HTTP zu veröffentlichen. Und Ihre Postanforderung ist eine SOAP-Anfrage. Sie können diese Soap-Nachricht im Hauptteil dieser Anfrage senden. Also nichts besonderes oder anders als viele Entwickler tun. Veröffentlichen Sie Ihre Soap-Daten über http mit java.net oder Apache oder anderen. Hier sind die Codebeispiele, dies zu tun:

HttpsURLConnection con = null; 
try{ 
    URL url = new URL("URL"); 
    con = (HttpsURLConnection) url.openConnection(); 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("content-type", "application/x-www-form-urlencoded"); 
    con.setRequestProperty("Content-Language", "application/soap+xml; charset=utf-8"); // request properties, set your needs 
    con.setDoOutput(true); 
    OutputStream os = con.getOutputStream(); 
    os.write(xmlData.getBytes("utf-8")); 
    os.close(); 

}catch(Exception e){ 
     e.printStackTrace(); 
}finally{ 
     con.disconnect(); 
} 

Eine weitere Option Apache Bibliothek zu verwenden wäre. Und der Code:

HttpPost httpPost = new HttpPost("URL");   
StringEntity strEntity = new StringEntity(xmlData, "text/xml", "UTF-8"); 

strEntity.setContentType("text/xml"); 
httpPost.setHeader("Content-Type","application/soap+xml;charset=UTF-8"); 
httpPost.setEntity(strEntity); 
HttpClient httpclient = new DefaultHttpClient(); 
BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httpPost); 
+0

Hallo, bitte sehen Sie sich die Frage an. Ich möchte 'xmlData' in der Methode POST. Danke, wenn du dir was vorschlagen kannst. –

+0

Was ich verstehe, ist, dass Sie XML-Daten an die spezifische URL ** posten möchten. Recht? – fiskra

+0

Ja, eigentlich wollte ich etwas tun wie: HttpPost post = new HttpPost (api); Liste urlParameters = new ArrayList (); URLParameters.add (neue BasicNameValuePair ("HTML", HTML)); Können wir so etwas tun? Problem ist, ich muss con.setSSLSocketFactory (sslContext.getSocketFactory()) verwenden; Hier kann ich aber nicht verstehen, wie man den Parameter 'xmlData' über diesen Parameter sendet. Irgendwelche Vorschläge? Vielen Dank. –

Verwandte Themen