2017-12-16 3 views
0

ヘッダに表示されませんリダイレクトを要求する私が抱えている問題は、リクエスト後にログを記録しているときに、その場所がヘッダーに表示されないということです。nodejs要求 - 約束のURLの場所は、私は現在、ウェブサイトへの要求を行い、その後、ヘッダを返すためにnodejsに要求-約束を使用してい

マイコード:

const rp = require('request-promise'); 

const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'; 
const url = //url 

var _include_headers = function(body, response, resolveWithFullResponse) { 
    return {'headers': response.headers, 'data': body}; 
    }; 

const options = { 
    uri: url, 
    followAllRedirects: true, 
    method: 'get', 
    gzip: true, 
    transform: _include_headers, 
    headers: { 
     'User-Agent': userAgent 
    }, 
}; 

const p1 = rp(options).then((response, error, html) => { 

    console.log(response.headers); 

}) 

コンソールは、ヘッダをログに記録しますが、それはヘッダオブジェクト内の場所を示していません。とにかく、リクエストを出してヘッダーを返すと、URLの場所を見つけることができますか?

+0

あなたは' followAllRedirectsを渡しています。これは 'request()'ライブラリに、あなたのリダイレクトを隠すように指示し、リダイレクト後の最終結果のみを与えることを意味します。あなたはリダイレクトステータスを取得し、自分自身をURLにしたい場合は、あなたが '要求を伝える必要があります()'、それはあなたに300番台のステータスやヘッダを返しますので、ライブラリに自動的にリダイレクトに従っていません。 – jfriend00

答えて

0

request-promiseのバージョンを教えてください。 このスニペットを試すことができます。

var rp = require('request-promise'); 

    rp({ 
     uri: 'http://google.com', 
     method: 'GET', 
     resolveWithFullResponse: true 
    }) 
     .then(function (response) { 
      console.dir(response.headers); 
     }); 
0

あなたはtruefollowAllRedirectsを設定すると、あなたのレスポンスヘッダにlocationフィールドを持っていない、と最終リダイレクトされたURLにアクセスする唯一の方法は、その中に、最終的なURLが含まれているresponse.request.uriオブジェクトにアクセスすることですがhrefプロパティ。

そうするために、あなたはresponse.request.uri.hrefに等しい追加finalUrlプロパティ渡すためにあなたのtransform機能を変更することができます。上記の例で

const rp = require('request-promise'); 

const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'; 
const url = "http://www.stackoverflow.com"; 

const _include_headers = function(body, response, resolveWithFullResponse) { 
    return { 
     'headers': response.headers, 
     'data': body, 
     'finalUrl': response.request.uri.href // contains final URL 
    }; 
}; 

const options = { 
    uri: url, 
    followAllRedirects: true, 
    method: 'get', 
    gzip: true, 
    transform: _include_headers, 
    headers: { 
     'User-Agent': userAgent 
    }, 
}; 

const p1 = rp(options).then((response, error, html) => { 

    console.log(response.finalUrl); 
}); 

を、http://www.stackoverflow.comは、どのようなプログラムが印刷されている、https://stackoverflow.comにリダイレクトされます。 true`のとfollowRedirect`が真である `のデフォルト:

関連する問題