116 lines
3.3 KiB
JavaScript
116 lines
3.3 KiB
JavaScript
'use strict';
|
|
/**
|
|
* HTTP 网络类
|
|
* Created by 蒋天蓓 on 2017/2/9 0009.
|
|
*/
|
|
|
|
/*global Java, base, module, exports, require, __FILE__*/
|
|
|
|
var URL = Java.type("java.net.URL");
|
|
var Files = Java.type("java.nio.file.Files");
|
|
var Paths = Java.type("java.nio.file.Paths");
|
|
var String = Java.type("java.lang.String");
|
|
|
|
var HttpURLConnection = Java.type("java.net.HttpURLConnection");
|
|
var HttpsURLConnection = Java.type("javax.net.ssl.HttpsURLConnection");
|
|
var SSLContext = Java.type("javax.net.ssl.SSLContext");
|
|
|
|
var HostnameVerifier = Java.type("javax.net.ssl.HostnameVerifier");
|
|
var X509TrustManager = Java.type("javax.net.ssl.X509TrustManager");
|
|
|
|
var TrustAnyHostnameVerifier = new HostnameVerifier({
|
|
verify: function (hostname, session) {
|
|
return true;
|
|
}
|
|
})
|
|
|
|
var SSLSocketFactory = function initSSLSocketFactory() {
|
|
var sslContext = SSLContext.getInstance("TLS");
|
|
sslContext.init(null, [new X509TrustManager({
|
|
getAcceptedIssuers: function () {
|
|
return null;
|
|
},
|
|
checkClientTrusted: function (chain, authType) {},
|
|
checkServerTrusted: function (chain, authType) {}
|
|
})], new java.security.SecureRandom());
|
|
return sslContext.getSocketFactory();
|
|
}();
|
|
|
|
var config = {
|
|
Charset: 'UTF-8',
|
|
ConnectTimeout: 10000,
|
|
ReadTimeout: 10000
|
|
}
|
|
|
|
function open(url, method, header) {
|
|
// conn.setRequestProperty
|
|
var conn = new URL(url).openConnection();
|
|
if (conn instanceof HttpsURLConnection) {
|
|
conn.setHostnameVerifier(TrustAnyHostnameVerifier);
|
|
conn.setSSLSocketFactory(SSLSocketFactory);
|
|
}
|
|
conn.setRequestMethod(method);
|
|
conn.setDoOutput(true);
|
|
conn.setDoInput(true);
|
|
conn.setConnectTimeout(config.ConnectTimeout);
|
|
conn.setReadTimeout(config.ReadTimeout);
|
|
for (var key in header) {
|
|
conn.setRequestProperty(key, header[key]);
|
|
}
|
|
return conn;
|
|
}
|
|
|
|
function buildUrl(url, params) {
|
|
if (params && Object.keys(params).length > 0) {
|
|
var queryStart = url.indexOf('?');
|
|
if (queryStart == -1) {
|
|
url += '?';
|
|
}
|
|
for (var key in params) {
|
|
url += key;
|
|
url += '=';
|
|
url += params[key];
|
|
url += '&';
|
|
}
|
|
return url.substr(0, url.length - 1);
|
|
}
|
|
return url;
|
|
}
|
|
|
|
function request(url, method, header, params, body) {
|
|
var conn = open(buildUrl(url, params), method, header);
|
|
try {
|
|
conn.connect();
|
|
if (body) {
|
|
var out = conn.getOutputStream();
|
|
out.write(new String(body).getBytes(config.Charset));
|
|
out.flush();
|
|
out.close();
|
|
}
|
|
return response(conn);
|
|
} finally {
|
|
conn.disconnect();
|
|
}
|
|
}
|
|
|
|
function response (conn) {
|
|
var temp = Paths.get(java.lang.System.getProperty("java.io.tmpdir"), java.util.UUID.randomUUID().toString());
|
|
Files.copy(conn.getInputStream(), temp);
|
|
var result = new String(Files.readAllBytes(temp), config.Charset);
|
|
var tempFile = temp.toFile();
|
|
tempFile.delete() || tempFile.deleteOnExit();
|
|
return result;
|
|
}
|
|
|
|
var http = {
|
|
config: config
|
|
};
|
|
|
|
['GET', 'POST', 'PUT', 'DELETE', 'HEADER'].forEach(function(method){
|
|
http[method.toLowerCase()] = function (url, header, params, body) {
|
|
return request(url, method, header, params, body);
|
|
}
|
|
})
|
|
|
|
exports = module.exports = http;
|