add support for multiline commands and -d param data /fixes #13

This commit is contained in:
Nick Carneiro
2016-02-29 22:48:00 -08:00
parent 7a64b4a105
commit 43ece41e79
4 changed files with 48 additions and 1 deletions

4
test/curl16.txt Normal file
View File

@@ -0,0 +1,4 @@
curl -X GET 'http://fiddle.jshell.net/echo/html/'\
-H 'Origin: http://fiddle.jshell.net'\
-d msg1="value1"\
-d msg2="value2"

8
test/parser_output4.js Normal file
View File

@@ -0,0 +1,8 @@
module.exports = {
url: 'http://fiddle.jshell.net/echo/html/',
headers: {
Origin: 'http://fiddle.jshell.net'
},
method: 'post',
data: 'msg1=value1&msg2=value2'
};

View File

@@ -230,3 +230,11 @@ test('http with charles syntax - python', function (t) {
t.equal(pythonCode, goodPythonCode);
t.end();
});
test('multiline http post with data - parser', function (t) {
var curlHttpGetCommand = fs.readFileSync(__dirname + '/curl16.txt', 'utf-8');
var parsedCommand = utils.parseCurlCommand(curlHttpGetCommand);
var goodParserOutput = require('./parser_output4.js');
t.deepEquals(parsedCommand, goodParserOutput);
t.end();
});

29
util.js
View File

@@ -2,6 +2,11 @@ var cookie = require('cookie');
var yargs = require('yargs');
var parseCurlCommand = function(curlCommand) {
var newlineFound = /\r|\n/.exec(curlCommand);
if (newlineFound) {
// remove newlines
curlCommand = curlCommand.replace(/\\\r|\\\n/g, '');
}
var yargObject = yargs(curlCommand.trim());
var parsedArguments = yargObject.argv;
var cookieString;
@@ -41,7 +46,7 @@ var parseCurlCommand = function(curlCommand) {
var method;
if (parsedArguments.X === 'POST') {
method = 'post';
} else if (parsedArguments.data || parsedArguments['data-binary']) {
} else if (parsedArguments.d || parsedArguments.data || parsedArguments['data-binary']) {
method = 'post';
} else {
method = 'get';
@@ -60,10 +65,32 @@ var parseCurlCommand = function(curlCommand) {
request.data = parsedArguments.data;
} else if (parsedArguments['data-binary']) {
request.data = parsedArguments['data-binary'];
} else if (parsedArguments['d']) {
request.data = parsedArguments['d'];
}
if (Array.isArray(request.data)) {
request.data = joinDataArguments(request.data);
}
return request;
};
/**
* given this: [ 'msg1=value1', 'msg2=value2' ]
* output this: 'msg1=value1&msg2=value2'
* @param dataArguments
*/
var joinDataArguments = function(dataArguments) {
var data = '';
dataArguments.forEach(function(argument, i) {
if (i === 0) {
data += argument;
} else {
data += '&' + argument;
}
});
return data;
};
var serializeCookies = function(cookieDict) {
var cookieString = '';
var i = 0;