2017-12-16 3 views
0

Ich verwende derzeit Anfrage-Versprechen in NodeJs, um eine Anfrage an eine Website und dann die Kopfzeilen zurück, wie ich versuche, die URL (Standort) der Anfrage nach Weiterleitungen. Obwohl das Problem, das ich habe, ist, dass der Standort nicht in den Headern angezeigt wird, wenn ich sie nach der Anforderung protokolliere.nodejs Anfrage-Versprechen URL Standort nicht in Kopfzeilen angezeigt

Mein Code:

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); 

}) 

Die Konsole protokolliert die Header, aber es zeigt nicht die Lage in der Header-Objekt. Kann ich den Ort der URL nach der Anfrage und der Rückgabe der Header finden?

+0

Sie übergeben 'folgeAllRedirects: true' und der Standardwert für' followRedirect' ist wahr. Das bedeutet, dass Sie der Bibliothek 'request()' sagen, dass Sie die Weiterleitungen ausblenden sollen, indem Sie ihnen folgen und Ihnen nur das Endergebnis nach der Weiterleitung geben. Wenn Sie den Redirect-Status und die URL selbst erhalten möchten, müssen Sie der 'request()' -Bibliothek mitteilen, dass sie den Weiterleitungen nicht automatisch folgt, damit sie Ihnen den 3xx-Status und die Header zurückgibt. – jfriend00

Antwort

0

Was ist Ihre request-promise Version? Sie können dieses Snippet ausprobieren.

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

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

Wenn Sie followAllRedirects auf true gesetzt, werden Sie kein location Feld in Ihrer Antwort-Header haben, und der einzige Weg, um die endgültige umgeleiteten URL zuzugreifen, ist das response.request.uri Objekt zuzugreifen, das die endgültige URL enthält in seinem href Eigentum.

so zu tun, können Sie Ihre transform Funktion ändern Sie eine zusätzliche finalUrl Eigenschaft zu übergeben, die zu response.request.uri.href gleich ist:

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); 
}); 

Im obigen Beispiel wird http://www.stackoverflow.com zu https://stackoverflow.com umgeleitet, das ist, was das Programm druckt .

Verwandte Themen