mirror of
https://github.com/ONLYOFFICE/server.git
synced 2026-04-07 14:04:35 +08:00
отправляем post запрос через модуль request.
git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/nodeJSProjects@66980 954022d7-b5bf-4e40-9824-e11837661b57
This commit is contained in:
committed by
Alexander.Trofimov
parent
d8b1144401
commit
7dea382c1c
@ -57,7 +57,8 @@
|
||||
"limits_image_download_timeout": 120,
|
||||
"editor_settings_spellchecker_url": "/spellchecker",
|
||||
"default_license_file_path": "./../../",
|
||||
"default_license_file_name": "./license.lic"
|
||||
"default_license_file_name": "./license.lic",
|
||||
"callbackRequestTimeout": 120
|
||||
},
|
||||
"utils": {
|
||||
"utils_common_fontdir": "null",
|
||||
|
||||
@ -185,6 +185,7 @@ function downloadUrlPromise(uri, optTimeout, optLimit) {
|
||||
uri = encodeURI(uri);
|
||||
}
|
||||
var urlParsed = url.parse(uri);
|
||||
//if you expect binary data, you should set encoding: null
|
||||
var options = {uri: urlParsed, encoding: null, timeout: optTimeout};
|
||||
if (urlParsed.protocol === 'https:') {
|
||||
//TODO: Check how to correct handle a ssl link
|
||||
@ -198,12 +199,40 @@ function downloadUrlPromise(uri, optTimeout, optLimit) {
|
||||
if (response.statusCode == 200 && (!optLimit || body.length < optLimit)) {
|
||||
resolve(body);
|
||||
} else {
|
||||
reject(new Error('Error response: statusCode:' + response.statusCode + ' ; contentLength:' + body.length + ' ;body:\r\n' + body));
|
||||
reject(new Error('Error response: statusCode:' + response.statusCode + ' ;body:\r\n' + body));
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
function postRequestPromise(uri, postData, optTimeout) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
//todo может стоит делать url.parse, а потом с каждой частью отдельно работать
|
||||
//для ссылок с руссикими буквами приходит 404
|
||||
if (!containsAllAsciiNP(uri)) {
|
||||
uri = encodeURI(uri);
|
||||
}
|
||||
var urlParsed = url.parse(uri);
|
||||
var options = {uri: urlParsed, body: postData, encoding: 'utf8', headers: {'Content-Type': 'application/json'}, timeout: optTimeout};
|
||||
if (urlParsed.protocol === 'https:') {
|
||||
//TODO: Check how to correct handle a ssl link
|
||||
urlParsed.rejectUnauthorized = false;
|
||||
options.rejectUnauthorized = false;
|
||||
}
|
||||
request.post(options, function(err, response, body) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
if (200 == response.statusCode || 204 == response.statusCode) {
|
||||
resolve(body);
|
||||
} else {
|
||||
reject(new Error('Error response: statusCode:' + response.statusCode + ' ;body:\r\n' + body));
|
||||
}
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
exports.postRequestPromise = postRequestPromise;
|
||||
exports.downloadUrlPromise = downloadUrlPromise;
|
||||
exports.mapAscServerErrorToOldError = function(error) {
|
||||
var res = -1;
|
||||
|
||||
@ -63,6 +63,7 @@ var redis = require(config.get('redis.name'));
|
||||
var pubsubService = require('./' + config.get('pubsub.name'));
|
||||
var queueService = require('./../../Common/sources/' + configCommon.get('queue.name'));
|
||||
var cfgSpellcheckerUrl = config.get('server.editor_settings_spellchecker_url');
|
||||
var cfgCallbackRequestTimeout = config.get('server.callbackRequestTimeout');
|
||||
|
||||
var cfgPubSubMaxChanges = config.get('pubsub.maxChanges');
|
||||
|
||||
@ -463,63 +464,12 @@ function* getOriginalParticipantsId(docId) {
|
||||
return result;
|
||||
}
|
||||
|
||||
function sendServerRequest(docId, server, postData, onReplyCallback) {
|
||||
if (!server.host || !server.path) {
|
||||
return;
|
||||
}
|
||||
//todo запрос через модуль request
|
||||
var postDataBuffer = new Buffer(postData, 'utf8');
|
||||
var options = {
|
||||
host: server.host,
|
||||
path: server.path,
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Content-Length': postDataBuffer.length
|
||||
},
|
||||
rejectUnauthorized: false
|
||||
};
|
||||
if (server.port) {
|
||||
options.port = server.port;
|
||||
}
|
||||
|
||||
var requestFunction = server.https ? https.request : http.request;
|
||||
|
||||
logger.info('postData: docId = %s %s', docId, postData);
|
||||
var req = requestFunction(options, function(res) {
|
||||
res.setEncoding('utf8');
|
||||
var replyData = '';
|
||||
res.on('data', function(chunk) {
|
||||
logger.info('postData data: docId = %s %s', docId, chunk);
|
||||
replyData += chunk;
|
||||
});
|
||||
res.on('end', function() {
|
||||
logger.info('postData end: docId = %s', docId);
|
||||
if (onReplyCallback) {
|
||||
onReplyCallback(replyData);
|
||||
onReplyCallback = null;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
req.on('error', function(e) {
|
||||
logger.warn('postData error: docId = %s %s', docId, e.message);
|
||||
if (onReplyCallback) {
|
||||
onReplyCallback(null);
|
||||
onReplyCallback = null;
|
||||
}
|
||||
});
|
||||
|
||||
// write data to request body
|
||||
req.write(postDataBuffer);
|
||||
req.end();
|
||||
}
|
||||
function sendServerRequestPromise(docId, server, postData) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
sendServerRequest(docId, server, postData, function(data) {
|
||||
resolve(data);
|
||||
});
|
||||
});
|
||||
function* sendServerRequest(docId, uri, postData) {
|
||||
var res = null;
|
||||
logger.debug('postData request: docId = %s;url = %s;data = %s', docId, uri, postData);
|
||||
var res = yield utils.postRequestPromise(uri, postData, cfgCallbackRequestTimeout * 1000);
|
||||
logger.debug('postData response: docId = %s;data = %s', docId, res);
|
||||
return res;
|
||||
}
|
||||
|
||||
// Парсинг ссылки
|
||||
@ -638,7 +588,15 @@ function* sendStatusDocument(docId, bChangeBase, callback, baseUrl) {
|
||||
sendData.setKey(docId);
|
||||
sendData.setStatus(status);
|
||||
sendData.setUsers(participants);
|
||||
var replyData = yield sendServerRequestPromise(docId, callback, JSON.stringify(sendData));
|
||||
var uri = callback.href;
|
||||
var replyData = null;
|
||||
var postData = JSON.stringify(sendData);
|
||||
try {
|
||||
replyData = yield* sendServerRequest(docId, uri, postData);
|
||||
} catch (err) {
|
||||
replyData = null;
|
||||
logger.error('postData error: docId = %s;url = %s;data = %s\r\n%s', docId, uri, postData, err.stack);
|
||||
}
|
||||
yield* onReplySendStatusDocument(docId, replyData);
|
||||
}
|
||||
function* onReplySendStatusDocument(docId, replyData) {
|
||||
@ -746,7 +704,7 @@ exports.version = asc_coAuthV;
|
||||
exports.c_oAscServerStatus = c_oAscServerStatus;
|
||||
exports.sendData = sendData;
|
||||
exports.parseUrl = parseUrl;
|
||||
exports.sendServerRequestPromise = sendServerRequestPromise;
|
||||
exports.sendServerRequest = sendServerRequest;
|
||||
exports.PublishType = PublishType;
|
||||
exports.publish = publish;
|
||||
exports.addTask = addTask;
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user