2015-10-05 23 views
5

我正在使用java创建桌面应用程序,并且此应用程序使用API​​。为了保证与API的通信,我获悉他们支持使用HTTPS。请指导我如何从java客户端设置https连接。如何从Java应用程序设置Https连接

API有这个功能,其中指出,它可以选择一个安全的连接:

private String getUrlAddress(XmlRequest request) { 
    // determine if this is a secure connection 
    String url = this.ssl ? "https://" : "http://"; 

    // determine service endpoint based on type of class/request passed in 
    if(request.getClass() == MessageRequest.class) { 
     url += ClockWorkSmsService.SMS_URL; 
    } 
    else { 
     url += ClockWorkSmsService.CREDIT_URL; 
    } 

    return url; 
} 

这段代码给了我的想法,“请求”将是我当前的URL或服务器,所以这将是我的我的身边将设置https连接。

Clockworksms API包装:

import com.clockworksms.*; 

public class DemoSms 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
     ClockWorkSmsService clockWorkSmsService = new ClockWorkSmsService("apikey"); 
     SMS sms = new SMS("441234567890", "Hello World");   
     ClockworkSmsResult result = clockWorkSmsService.send(sms); 

     if(result.isSuccess()) 
     { 
      System.out.println("Sent with ID: " + result.getId()); 
     } 
     else 
     { 
      System.out.println("Error: " + result.getErrorMessage()); 
     } 
     } 
     catch (ClockworkException e) 
     { 
     e.printStackTrace(); 
     } 
    } 
} 
+0

你可能会从这里的一些想法[http://stackoverflow.com/ question/4722644/web-service-client-with-java-application-and-ssl]也可以看看[http://www.javaworld.com/article/2077600/learn-java/java-tip-96--请使用https-in-your-java-client-code.html] – Vishal

+0

您需要向安全的https API发出请求。对? – John

+0

@John是的,我想要在那里有一个安全的连接,我被告知,https是实现这一目标的方式 – magicianiam

回答

2

如果它是一个安全的REST API。看一看here

如果它只是一个你需要访问的HTTP资源,然后看看Apache HTTPClient库和它的tutorials

有数百种资源在那里,请尝试,然后发布具体问题。

+0

谢谢你,我现在就读这个,如果我在遇到困难时问你一些问题,会没事的吗? – magicianiam

+0

我读了[link](http://www.bhaveshthaker.com/24/calling-invoking-secure-restful-web-service-over-https-with-jax-rs-in-java-without-keystore-truststore信息/),并没有真正完全理解它,但从我可以得到的是,它建立它自己作为一个https连接,然后在那部分它如何连接到我的API或我如何连接到我的API,并且API会自动知道连接已经安全吗?谢谢 – magicianiam

+1

是基于API REST的? – John

0

其实我们需要重写现有的默认行为,并添加允许的所有可信服务器,下面的代码片段将帮助您:

/* START of the fix*/ 
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
     public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } 
     public void checkClientTrusted(X509Certificate[] certs, String authType) { } 
     public void checkServerTrusted(X509Certificate[] certs, String authType) { } 

    } }; 

    SSLContext sc = SSLContext.getInstance("SSL"); 
    sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

    // Create all-trusting host name verifier 
    HostnameVerifier allHostsValid = new HostnameVerifier() { 
     public boolean verify(String hostname, SSLSession session) { return true; } 
    }; 
    // Install the all-trusting host verifier 
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 
    /* End of the fix*/ 
相关问题