2017-07-10 10 views
2

私はPOST XMLデータをキー値ペアなしで直接APIに送るアプリケーションを作成しています。 APIには認証認証が必要です。これはここでコードで行われます。今私は同じURLにデータをPOSTしたい。JavaからAPIを呼び出してXMLデータをPOSTする方法は?

enter image description here 私の現在のコードは次のとおりです:

@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; 
} 

は一方で、同じURLのために、私はメソッドからです。xmlDataを投稿したい。ここ

は、私が何をしたいです。 どうすればいいですか? con.setRequestMethod("POST");の後にコードで変更する必要はありますか?

+0

試したときに何が起こったのですか? – user7294900

+0

con.setRequestMethod( "POST")の後にデータをPOSTする方法を尋ねています。 私のメソッドを次のように編集したとします。public String demoAPI(String xmlData)。今、このURLにこのxmlDataをPOSTする方法はありますか? –

答えて

0

あなたはURLを持っており、このURLをHTTP経由で投稿するXMLがあります。投稿リクエストはSOAPリクエストです。このリクエストの本文にこのSOAPメッセージを送信することができます。だから、何も特別なものではなく、多くの開発者のものとは異なります。 http:// java.netまたはApacheなどであなたの石鹸データを投稿してください。ここでこれを行うためのコードサンプルは、次のとおりです。

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(); 
} 

別のオプションは、Apacheライブラリを使用することです。コード:

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

こんにちは、質問を参照してください。私はこのメソッドで 'xmlData'をPOSTしたいと思います。あなたが同じものを何か提案することができれば、ありがとう。 –

+0

私が理解していることは、**特定のURLに** XMLデータを投稿したいということです。右? – fiskra

+0

はい、実際には私は次のようなことをしたかったのです: HttpPost post = new HttpPost(api); List urlParameters =新しいArrayList (); urlParameters.add(新しいBasicNameValuePair( "html"、html)); このようなことができますか? 問題は私はcon.setSSLSocketFactory(sslContext.getSocketFactory())を使用する必要があります。ここでそれを介して 'xmlData'パラメータを送信する方法を理解することはできません。 提案がありますか?ありがとう。 –

関連する問題