我使用java创建桌面应用程序,此应用程序使用API。为确保与API的通信,我们得到了他们支持使用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;
}
这段代码让我觉得"请求"将是我当前的网址或服务器,所以我将在我这边设置https连接。
Clockworksms API Wrapper:
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 :(得分:2)
答案 1 :(得分: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*/