2015-11-24 89 views
1

我使用HttpsURLConnection調用POST方法,我無法將請求有效載荷添加到調用。當我從soapui工具手動執行時,相同的請求會起作用。有誰知道如何做到這一點?HttpsURLConnection休息服務電話

這裏是Java代碼我使用:

// Keystore 
    String jksFile = "/Users/......jks"; 
    String password = "password"; 

    System.setProperty("javax.net.ssl.keyStore", jksFile); 
    System.setProperty("javax.net.ssl.keyStorePassword", password); 

    String u = "https://example.com:443/private/loan-application"; 

    URL url = new URL(u); 

    String version = "3"; 

    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setUseCaches(false); 
    conn.setConnectTimeout(10000); 
    conn.setReadTimeout(10000); 
    conn.setRequestProperty("Accept", "application/json;v=" + version); 
    conn.setRequestProperty("Api-Key", "XYZ"); 

    String jsonParamString = "{\"didNumber\":\"DI457\", \" .... "; 

    //Create JSONObject here 
    JSONObject jsonParam = new JSONObject(); 


    byte[] postData = jsonParamString.toString().getBytes(); 


    Map<String, List<String>> requestProperties = conn.getRequestProperties(); 
    displayHeaders(requestProperties); 

    OutputStream out = conn.getOutputStream(); 

    out.write(postData); 
    out.close(); 


    int respCode = conn.getResponseCode(); 


    System.out.println("Response headers:"); 
    displayHeaders(
      conn.getHeaderFields()); 

    InputStream is = null; 
    if (respCode == 200 || respCode == 203) { 
     is = conn.getInputStream(); 
    } 

    if (is == null) { 
     System.out.println("Using error stream"); 
     is = conn.getErrorStream(); 
    } 

    is.close(); 

回答

0

一個爲什麼你HttpsURLConnection調用失敗可能的解釋是,你還沒有正確配置SSL設置。特別是,域example.com正在提供不在您的信任存儲中的證書,因此您的程序在SSL握手期間失敗。嘗試添加下面的代碼,這將配置程序信任所有證書:

SSLContext sslContext = SSLContext.getInstance("TLS"); 
TrustManager tm = new X509TrustManager() { 
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } 
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } 
    public X509Certificate[] getAcceptedIssuers() { return null; } 
}; 
sslContext.init(null, new TrustManager[]{tm}, null); 
conn.setSSLSocketFactory(sslContext.getSocketFactory()); 

請注意,你應該使用此代碼在生產,因爲它接受任何網站安全。在生產中,您應該將程序配置爲只接受可信證書。

+0

謝謝Tim給你回覆。我不認爲這是因爲ssl錯誤。我可以調用GET方法,它工作正常。我得到200個狀態碼。 – Namrata

+0

您是否嘗試添加我的代碼?另外,請在Tomcat中顯示錯誤日誌。 –