需求如题
下面是我搜到的一个方法(也就搜到这个方法):
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然后更新上来
- 你用的是request库,那应该先看看这个库,有没有对rediect的处理。(比如参数
followRedirect
) - 原生情况下,按http协议:先是先判断res.statusCode是不是3xx,然后取res.getHeader(‘location’)