summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Malcontenti-Wilson <adman.com@gmail.com>2012-05-16 16:27:34 +0200
committerBen Noordhuis <info@bnoordhuis.nl>2012-05-16 16:43:18 +0200
commit4099d1eebae4e78864a6879c0b9e08f31d48d8cb (patch)
tree9d0e753bb11fc92b654ac7f91c653e437ba35868
parent05b81f333c8563e5d714a06bf98fc9f963ba9f64 (diff)
downloadnode-new-4099d1eebae4e78864a6879c0b9e08f31d48d8cb.tar.gz
http: make http.get() accept a URL
http.get() now accepts either a URL (as a string) or an options object.
-rw-r--r--doc/api/http.markdown18
-rw-r--r--lib/http.js5
-rw-r--r--test/simple/test-http-client-get-url.js44
3 files changed, 56 insertions, 11 deletions
diff --git a/doc/api/http.markdown b/doc/api/http.markdown
index d064b3f29d..962aa49081 100644
--- a/doc/api/http.markdown
+++ b/doc/api/http.markdown
@@ -446,8 +446,10 @@ followed by `response.end()`.
## http.request(options, callback)
Node maintains several connections per server to make HTTP requests.
-This function allows one to transparently issue requests. `options` align
-with [url.parse()](url.html#url.parse).
+This function allows one to transparently issue requests.
+
+`options` can be an object or a string. If `options` is a string, it is
+automatically parsed with [url.parse()](url.html#url.parse).
Options:
@@ -528,18 +530,12 @@ There are a few special headers that should be noted.
## http.get(options, callback)
Since most requests are GET requests without bodies, Node provides this
-convenience method. The only difference between this method and `http.request()` is
-that it sets the method to GET and calls `req.end()` automatically.
+convenience method. The only difference between this method and `http.request()`
+is that it sets the method to GET and calls `req.end()` automatically.
Example:
- var options = {
- host: 'www.google.com',
- port: 80,
- path: '/index.html'
- };
-
- http.get(options, function(res) {
+ http.get("http://www.google.com/index.html", function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
diff --git a/lib/http.js b/lib/http.js
index 232d52afe0..a98a3104cd 100644
--- a/lib/http.js
+++ b/lib/http.js
@@ -22,6 +22,7 @@
var util = require('util');
var net = require('net');
var stream = require('stream');
+var url = require('url');
var EventEmitter = require('events').EventEmitter;
var FreeList = require('freelist').FreeList;
var HTTPParser = process.binding('http_parser').HTTPParser;
@@ -1571,6 +1572,10 @@ ClientRequest.prototype.clearTimeout = function(cb) {
};
exports.request = function(options, cb) {
+ if (typeof options === 'string') {
+ options = url.parse(options);
+ }
+
if (options.protocol && options.protocol !== 'http:') {
throw new Error('Protocol:' + options.protocol + ' not supported.');
}
diff --git a/test/simple/test-http-client-get-url.js b/test/simple/test-http-client-get-url.js
new file mode 100644
index 0000000000..451f5eeaa9
--- /dev/null
+++ b/test/simple/test-http-client-get-url.js
@@ -0,0 +1,44 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common');
+var assert = require('assert');
+var http = require('http');
+
+var seen_req = false;
+
+var server = http.createServer(function(req, res) {
+ assert.equal('GET', req.method);
+ assert.equal('/foo?bar', req.url);
+ res.writeHead(200, {'Content-Type': 'text/plain'});
+ res.write('hello\n');
+ res.end();
+ server.close();
+ seen_req = true;
+});
+
+server.listen(common.PORT, function() {
+ http.get('http://127.0.0.1:' + common.PORT + '/foo?bar');
+});
+
+process.on('exit', function() {
+ assert(seen_req);
+});