diff --git a/index.js b/index.js index a0407dc..2db2ef5 100644 --- a/index.js +++ b/index.js @@ -59,6 +59,8 @@ function got(url, opts, cb) { opts.method = opts.method || 'POST'; } + opts.method = opts.method || 'GET'; + // returns a proxy stream to the response // if no callback has been provided if (!cb) { @@ -114,8 +116,8 @@ function got(url, opts, cb) { proxy.emit('response', res); } - // redirect - if (statuses.redirect[statusCode] && 'location' in res.headers) { + // auto-redirect only for GET and HEAD methods + if (statuses.redirect[statusCode] && 'location' in res.headers && (opts.method === 'GET' || opts.method === 'HEAD')) { res.resume(); // Discard response if (++redirectCount > 10) { @@ -138,7 +140,7 @@ function got(url, opts, cb) { if (statusCode < 200 || statusCode > 299) { readAllStream(res, encoding, function (err, data) { - err = new GotError(url + ' response code is ' + statusCode + ' (' + statuses[statusCode] + ')', err); + err = new GotError(opts.method + ' ' + url + ' response code is ' + statusCode + ' (' + statuses[statusCode] + ')', err); err.code = statusCode; if (data && json) { diff --git a/test/test-error.js b/test/test-error.js index aeed4ab..2ae0239 100644 --- a/test/test-error.js +++ b/test/test-error.js @@ -18,7 +18,7 @@ tape('setup', function (t) { tape('error message', function (t) { got(s.url, function (err) { t.ok(err); - t.equal(err.message, 'http://localhost:6767 response code is 404 (Not Found)'); + t.equal(err.message, 'GET http://localhost:6767 response code is 404 (Not Found)'); t.end(); }); }); diff --git a/test/test-json.js b/test/test-json.js index 3a98f06..4427d2e 100644 --- a/test/test-json.js +++ b/test/test-json.js @@ -69,7 +69,7 @@ tape('json option should catch errors on invalid non-200 responses', function (t t.ok(err.nested); t.equal(err.nested.message, 'Unexpected token I'); t.ok(err.nested.nested); - t.equal(err.nested.nested.message, 'http://localhost:6767/non200-invalid response code is 500 (Internal Server Error)'); + t.equal(err.nested.nested.message, 'GET http://localhost:6767/non200-invalid response code is 500 (Internal Server Error)'); t.end(); }); }); diff --git a/test/test-redirects.js b/test/test-redirects.js index 40e9515..cfa0f1e 100644 --- a/test/test-redirects.js +++ b/test/test-redirects.js @@ -82,6 +82,14 @@ tape('host+path in options are not breaking redirects', function (t) { }); }); +tape('redirect only GET and HEAD requests', function (t) { + got(s.url + '/relative', {body: 'wow'}, function (err, data) { + t.equal(err.message, 'POST http://localhost:6767/relative response code is 302 (Found)'); + t.equal(err.code, 302); + t.end(); + }); +}); + tape('cleanup', function (t) { s.close(); t.end();