Node.js 如何获取重定向以后的URL
发布于 3 个月前 作者 zengj8 721 次浏览 最后一次编辑是 2 个月前 来自 问答

需求如题

下面是我搜到的一个方法(也就搜到这个方法):

var request = require('request');
var r = request.get('http://www.baidu.com', 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);
});

但是有少数网站行不通。虽然可以 console.log 出正确的网址,但同时也会报出 err,输出的 err 如下

{ Error: Parse Error
    at Socket.socketOnData (_http_client.js:411:20)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:191:7)
    at readableAddChunk (_stream_readable.js:176:18)
    at Socket.Readable.push (_stream_readable.js:134:10)
    at TCP.onread (net.js:554:20) bytesParsed: 768, code: 'HPE_INVALID_CONSTANT' }

我分别输出成功和错误时的r.response.headers感觉没有任何异常,在stackflow上搜HPE_INVALID_CONSTANT也没有我想要的结果

失败的URL: http://XX.XX.XX.XX:XXXX/funcapi?md5=a4c9ca60e5fbe304990fe111cb5afb59&sha1=a6bcb478ed2e5f4edf9478f96594f7789b1a914d&fileSize=39532783&contentType=mp4&token=htd9wHyQNHGp8.1wsQE1r.1.0mxSACjkH7mGf6xKx.0X9HrvclocrjDYGxpooVv8YOtWRr49Xm.0hryJmbprq.1tHXaTmJZrAMFp5WNbKE.1c2GGHoVDns3IGLo8dTekhrix0ohxvj6NmpNfj1Jpf.0la0owrIrdi2bf1KUaN2z.0NjJ0Z20.2 http://XX.XX.XX.XX:XXXX/funcapiresize/images/a6bcb478ed2e5f4edf9478f96594f7789b1a914d/39532783/a4c9ca60e5fbe304990fe111cb5afb59.jpg

两个URL都是同一个网站上的,一个是视频链接一个是图片链接。别的网站上的视频链接和图片链接都不会有 err。所以我觉得是网站的问题,不是content-type的问题。

有没有大佬能指点方向。(指出该实现方法的问题或者是实现该需求的方法)

PS:大部分都是成功的,会抛出err的url是我在公司内网找到的,我会尽快在公网找到会抛出err的url然后更新上来

1 回复
  1. 你用的是request库,那应该先看看这个库,有没有对rediect的处理。(比如参数followRedirect
  2. 原生情况下,按http协议:先是先判断res.statusCode是不是3xx,然后取res.getHeader(‘location’)
回到顶部