UFO ET IT

nodejs 요청 모듈에서 리디렉션 된 URL을 어떻게 얻습니까?

ufoet 2020. 11. 24. 20:39
반응형

nodejs 요청 모듈에서 리디렉션 된 URL을 어떻게 얻습니까?


nodejs 요청 모듈을 사용하여 나를 다른 페이지로 리디렉션하는 URL을 따르려고 합니다 .

문서를 살펴보면 리디렉션 후 URL을 검색 할 수있는 것을 찾을 수 없습니다.

내 코드는 다음과 같습니다.

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

});

리디렉션 체인에서 마지막 URL을 확보하는 매우 쉬운 두 가지 방법이 있습니다.

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

URI는 객체입니다. uri.href는 쿼리 매개 변수가있는 URL을 문자열로 포함합니다.

코드는 요청 작성자의 github 문제에 대한 주석에서 제공됩니다. https://github.com/mikeal/request/pull/220#issuecomment-5012579

예:

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

이렇게하면 http://www.google.com/?q=foo가 세 번 인쇄됩니다 (www가없는 주소에서 www가있는 주소로 리디렉션되었습니다).


리디렉션 URL을 찾으려면 다음을 시도하십시오.

var url = 'http://www.google.com';
request({ url: url, followRedirect: false }, function (err, res, body) {
  console.log(res.headers.location);
});

request기본적으로 리디렉션을 가져 오며 기본적으로 10 개의 리디렉션을 통과 할 수 있습니다. 문서 에서이를 확인할 수 있습니다 . 이것의 단점은 당신이 얻는 URL이 기본 옵션으로 리디렉션 된 URL인지 원본인지 알 수 없다는 것입니다.

예를 들면 :

request('http://www.google.com', function (error, response, body) {
    console.log(response.headers) 
    console.log(body) // Print the google web page.
})

출력을 제공

> { date: 'Wed, 22 May 2013 15:11:58 GMT',
  expires: '-1',
  'cache-control': 'private, max-age=0',
  'content-type': 'text/html; charset=ISO-8859-1',
  server: 'gws',
  'x-xss-protection': '1; mode=block',
  'x-frame-options': 'SAMEORIGIN',
  'transfer-encoding': 'chunked' }

하지만 옵션 followRedirect을 거짓으로 제공하면

request({url:'http://www.google.com',followRedirect :false}, function (error, response, body) {
    console.log(response.headers) 
    console.log(body)
});

그것은 준다

> { location: 'http://www.google.co.in/',
  'cache-control': 'private',
  'content-type': 'text/html; charset=UTF-8',
  date: 'Wed, 22 May 2013 15:12:27 GMT',
  server: 'gws',
  'content-length': '221',
  'x-xss-protection': '1; mode=block',
  'x-frame-options': 'SAMEORIGIN' }
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.co.in/">here</A>.
</BODY></HTML>

따라서 리디렉션 된 콘텐츠를 가져 오는 것에 대해 걱정하지 마십시오. 그러나 리디렉션되었는지 여부를 알고 싶다면 followRedirectfalse로 설정 location하고 응답 헤더를 확인하십시오 .


다음 과 같이 followRedirect(대신 followAllRedirects) 함수 양식을 사용할 수 있습니다 .

options.followRedirect = function(response) {
  var url = require('url');
  var from = response.request.href;
  var to = url.resolve(response.headers.location, response.request.href);
  return true;
};

request(options, function(error, response, body) {
  // normal code
});

참고 URL : https://stackoverflow.com/questions/16687618/how-do-i-get-the-redirected-url-from-the-nodejs-request-module

반응형