JAVA中如何调用API函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中如何调用API函数?相关的知识,希望对你有一定的参考价值。
如题描述~!
参考技术A JAVA不能直接调用Windows底层API,除非使用JNI技术。需要C语言配合 参考技术B 调用API函数 ?打开某个类的API你可以看到类的详细介绍和类方法和类实例化后的方法(函数)
你在写程序的时候 可以在实例化某个类后 用对象调用这些函数
比如:
String s = new String("sdfsdf");
s.toString();
如何在 JAVA 中使用证书调用服务器 API
【中文标题】如何在 JAVA 中使用证书调用服务器 API【英文标题】:How to Call Server API using certificate in JAVA 【发布时间】:2021-06-08 15:56:17 【问题描述】:我必须使用证书调用服务器 API,所以我已将 cer 文件导入密钥库并完成编码,但仍然出现错误 javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
用于将 cer 文件导入密钥库的命令。 keytool -importcert -file D:\KALAIVANI_ALL\kalaivani\NEW_EMANDATE_APGB\servertoservecert\onmagcert.cer -keystore D:\KALAIVANI_ALL\kalaivani\NEW_EMANDATE_APGB\servertoservecert\server_npcikeystore.jks -alias "cedge1"
appPathCertificate="D:/KALAIVANI_ALL/kalaivani/NEW_EMANDATE_APGB/servertoservecert/server_npcikeystore.jks";
System.out.println("appPathCertificate--->"+appPathCertificate);
char[] passphrase = "cedge1".toCharArray(); //password
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(new FileInputStream(appPathCertificate), passphrase); //path
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keystore);
SSLContext context = SSLContext.getInstance("TLS");
TrustManager[] trustManagers = tmf.getTrustManagers();
context.init(null, trustManagers, null);
SSLSocketFactory sf = context.getSocketFactory();
URL url = new URL(common_utility.getEmandateServerResponeURL());
System.setProperty("javax.net.ssl.keyStore", appPathCertificate);
System.setProperty("javax.net.ssl.keyStorePassword", "cedge1");
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
String proxyhost=common_utility.getProxyHost();
String proxyport=common_utility.getProxyPort();
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyhost, new Integer(proxyport)));
HttpsURLConnection conn = (HttpsURLConnection ) url.openConnection(proxy);
conn.setSSLSocketFactory(sf);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setUseCaches (false);
System.out.println("GETISSUE Request : "+str_jsonparams);
OutputStream os = conn.getOutputStream();
os.write(str_jsonparams.getBytes());
os.flush();
System.out.println("Response code :"+conn.getResponseCode());
【问题讨论】:
任何人都可以帮忙 【参考方案1】:您在SSL handshake
过程中遇到了验证来自服务器的响应的问题。您需要在trust store
中添加中间证书和根证书。这些证书将用于验证服务器身份。
例如,在建立连接时,您会收到stackexchange
服务器证书。然后为了验证身份,您必须在信任库中有R3 cert
(中间CA)和DST Root CA X3
(根CA)。
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keystore);
context.init(null, trustManagers, null);
在您的情况下,当您使用 Keystore
初始化 TrustManagerFactory
时,您必须将 intermediates
和 root
证书放入密钥库中。 JDK store cacerts
不会在这里使用。
【讨论】:
实际上我只从目标端获得了用于访问 URL 的 CER 文件,因为我转换为 jks 并通过 httpsurl 连接。我是否也必须从他们那里获得中间证书和根证书?如何在编码中也通过该证书。或者只需要添加 C:\Program Files\Java\jdk1.8.0_191\jre\lib\security\cacerts。这足够了。请建议 您需要来自目标方的根证书和中间证书。您可以采用任何一种方法。将其添加到 JDK 信任库的底层,您的应用程序正在使用该信任库或执行上述操作。在您的应用中创建自定义信任库,并使用包含证书的密钥库文件对其进行初始化。以上是关于JAVA中如何调用API函数?的主要内容,如果未能解决你的问题,请参考以下文章
delphi中的showmessage函数是调用的哪个API函数