Search code examples
node.jsmodulerequest

How do I get the redirected url from the nodejs request module?


I'm trying to follow through on a url that redirects me to another page using the nodejs request module.

Combing through the docs I could not find anything that allows me to retrieve the url after the redirect.

My code is as follows:

var request = require("request"),
    options = {
      uri: 'http://www.someredirect.com/somepage.asp',
      timeout: 2000,
      followAllRedirects: true
    };

request( options, function(error, response, body) {

    console.log( response );

});

Solution

  • There are two very easy ways to get hold of the last url in a chain of redirects.

    var r = request(url, function (e, response) {
      r.uri
      response.request.uri
    })
    

    The uri is a object. uri.href contains the url, with query parameters, as a string.

    The code comes from a comment on a github issue by request's creator: https://github.com/mikeal/request/pull/220#issuecomment-5012579

    Example:

    var request = require('request');
    var r = request.get('http://google.com?q=foo', function (err, res, body) {
      console.log(r.uri.href);
      console.log(res.request.uri.href);
    
      // Mikael doesn't mention getting the uri using 'this' so maybe it's best to avoid it
      // please add a comment if you know why this might be bad
      console.log(this.uri.href);
    });
    

    This will print http://www.google.com/?q=foo three times (note that we were redirected to an address with www from one without).