Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 请求npm:处理重定向_Javascript_Node.js_Redirect_Npm - Fatal编程技术网

Javascript 请求npm:处理重定向

Javascript 请求npm:处理重定向,javascript,node.js,redirect,npm,Javascript,Node.js,Redirect,Npm,我想知道是否有人知道如何处理来自bitly或tribal或Twitter的t.co URL等网站的请求npm重定向。例如,如果我有一个网页,我想通过请求npm刮取它,而我必须到达该网页的链接是一个将要重定向我的位或缩短的URL,那么我如何处理这些重定向 我发现请求npm的“followRedirect”选项默认设置为true。如果我将其设置为false,我可以通过抓取返回的页面来获得页面将重定向到的下一个链接,但这不是最好的,因为我不知道我将要经历多少重定向 现在我得到一个500错误。当我将“f

我想知道是否有人知道如何处理来自bitly或tribal或Twitter的t.co URL等网站的请求npm重定向。例如,如果我有一个网页,我想通过请求npm刮取它,而我必须到达该网页的链接是一个将要重定向我的位或缩短的URL,那么我如何处理这些重定向

我发现请求npm的“followRedirect”选项默认设置为true。如果我将其设置为false,我可以通过抓取返回的页面来获得页面将重定向到的下一个链接,但这不是最好的,因为我不知道我将要经历多少重定向

现在我得到一个500错误。当我将“followRedirect”设置为true时。当我将“followRedirect”设置为false时,我可以得到每个重定向页面。同样,我不知道有多少重定向页面,我将不得不通过。代码如下:

var options = {
  followRedirect: false
};

request('http://t.co/gJ74UfmH4i', options, function(err, response, body){
     // when options are set I get the redirect page
     // when options are not set I get a 500
});
默认情况下,以下HTTP 3xx重定向,但您使用的URL返回的是带有重定向样式的HTTP 200。我不确定请求是否支持这种特定类型的重定向,所以您可能需要解析响应并手动执行

GET http://t.co/gJ74UfmH4i HTTP/1.1

HTTP/1.1 200 OK
cache-control: private,max-age=300
content-length: 208
content-type: text/html; charset=utf-8
date: Fri, 28 Aug 2015 16:28:59 GMT
expires: Fri, 28 Aug 2015 16:33:59 GMT
server: tsa_b
set-cookie: muc=b0a729d6-9a30-466c-9cd9-57306369613f; Expires=Wed, 09 Aug 2017 16:28:59 GMT; Domain=t.co
x-connection-hash: 28133ba91da8c83d45afa434e12f8a72
x-response-time: 9
x-xss-protection: 1; mode=block

<noscript><META http-equiv="refresh" content="0;URL=http://nyti.ms/1EmZJhP"></noscript><title>http://nyti.ms/1EmZJhP</title><script>window.opener = null; location.replace("http:\/\/nyti.ms\/1EmZJhP")</script>
GEThttp://t.co/gJ74UfmH4i HTTP/1.1
HTTP/1.1200ok
缓存控制:专用,最大使用年限=300
内容长度:208
内容类型:text/html;字符集=utf-8
日期:2015年8月28日星期五格林尼治标准时间16:28:59
到期时间:2015年8月28日星期五16:33:59 GMT
伺服器:tsa_b
设置cookie:muc=b0a729d6-9a30-466c-9cd9-57306369613f;Expires=2017年8月9日星期三格林威治标准时间16:28:59;域=t.co
x-connection-hash:28133ba91da8c83d45afa434e12f8a72
x响应时间:9
x-xss-protection:1;模式=块
http://nyti.ms/1EmZJhPwindow.opener =零;location.replace(“http:\/\/nyti.ms\/1EmZJhP”)
理解这个问题的一个可能途径是使用followRedirect函数,看看是否可以找出它的失败之处

从:


followRedirect
-将HTTP 3xx响应作为重定向进行跟踪(默认值:
true
此属性也可以作为函数实现,该函数将响应对象作为单个参数获取,如果重定向应继续,则返回
true
,否则返回
false

首先,需要使用followAllRedirects:true参数获取最后一个重定向url

request('http://t.co/gJ74UfmH4i', {
  method: 'HEAD',
  followAllRedirects: true
}, function(err, response, body) {
  var url = response.request.href
}) 
>

第二部分是请求最终url,带有一些类似浏览器的标题

request(url, {
  headers: {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.46 Safari/537.36"
  },
}, function(err, response, body) { 
  //here is your body 
})

我假设你指的是名为Request by Mikael()的NodeJS包?是的,这是正确的。我也发现了。我在文档中发现,“followRedirect”接受一个必须返回true的函数。我想知道它是否能返回一个真实的值。也许是另一个请求功能。啊,刚才看到这个很抱歉。谢谢你的回答!有一件事我想提醒其他读过这篇文章的人。这个解决方案是有效的,但我遇到了一些问题,比如陷入事件循环以及必须释放事件侦听器。