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>
따라서 리디렉션 된 콘텐츠를 가져 오는 것에 대해 걱정하지 마십시오. 그러나 리디렉션되었는지 여부를 알고 싶다면 followRedirect
false로 설정 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
});
'UFO ET IT' 카테고리의 다른 글
여러 모델 하위 클래스의 Backbone.js 컬렉션 (0) | 2020.11.24 |
---|---|
자바 동기화 목록 (0) | 2020.11.24 |
Android Studio를 사용하여 코드 커버리지를 얻는 방법은 무엇입니까? (0) | 2020.11.24 |
.NET에서 System.String.Copy를 사용하는 것은 무엇입니까? (0) | 2020.11.24 |
PHP에서 친숙한 URL을 만드는 방법은 무엇입니까? (0) | 2020.11.24 |