网上有几个代码示例,SO中已经有几个非常好的解决方案,但是没有一个能够让我明白并且我不想复制某人的代码而没有理解它。
对 HTTP 页面发帖非常简单,大约6行,但 HTTPS 的所有示例都要长得多,难以掌握。
有人可以提供一个(评论很多的)简短摘要或链接到一个好的教程,解释它是如何在没有所有花里胡哨的情况下完成的吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
尝试使用以下功能进行https发布请求。如果你没有得到代码到底在做什么,你可以在下面的评论中。如果知道答案,我会帮助你。
private static char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
StringBuffer messagebuffer = new StringBuffer();
private String makeHTTPSPostRequest(String httpsURL) throws IOException,
NoSuchAlgorithmException, CertificateException,
CertificateEncodingException {
final HttpsURLConnection con = (HttpsURLConnection) new URL(httpsURL)
.openConnection();
con.connect();
final Certificate cert = con.getServerCertificates()[0];
final MessageDigest md = MessageDigest.getInstance("SHA1");
md.update(cert.getEncoded());
InputStream inputStream = con.getInputStream();
DataInputStream dis = new DataInputStream(inputStream);
int ch;
long len = con.getContentLength();
if (len != -1) {
for (int i = 0; i < len; i++)
if ((ch = dis.read()) != -1) {
messagebuffer.append((char) ch);
}
} else {
while ((ch = dis.read()) != -1)
messagebuffer.append((char) ch);
}
dis.close();
return dumpHex(md.digest());
}
private static String dumpHex(byte[] data) {
final int n = data.length;
final StringBuilder sb = new StringBuilder(n * 3 - 1);
for (int i = 0; i < n; i++) {
if (i > 0) {
sb.append(' ');
}
sb.append(HEX_CHARS[(data[i] >> 4) & 0x0F]);
sb.append(HEX_CHARS[data[i] & 0x0F]);
}
return sb.toString();
}