Nodejs 接口之 解析淘宝客短链
给你一个淘宝客的短链,如果获取他跳转后的地址,这是我最近在做个一个程序,使用node开发总体来说还是挺简答的。
大概说下流程
第一步:解析出这个短链最终的真实地址
我的第一个想法是,是不是需要啥啥接口才可以哇。但是我又想,这也太麻烦了,如果我访问了这个链接是不是就可以得到真实的链接了。好,到网上找到了一个request库,还是有实例哦,简单的不要不要的,赶紧弄了下,果然是有结果的。
var r = request(url, function(err, res, body) { var uri = res.request.uri.href; console.log(uri); }
可以了。地址拿到了,用浏览器打开试试,结果还是有问题,这个地址不是产品的真实地址,还是要做一个跳转的,好吧。
我又想,这个页面究竟是个啥,打开一看,其实里面就是个js函数,执行了就简单了,这个对于node来说真实小菜一碟哇。
突然让我想起来urllib这个库,嗯,不错很好用的。
开始用的时候,直接请求就以为能得到结果了,结果不是的,还需要在请求中加上referer,哈哈,也许是个漏洞吧,这样我就能解析出真实的地址了。
那先解决第一个问题就是node如何营造一个dom的环境,玩过dom的人肯定知道jsdom啦,然后在进行urllib请求根据302跳转获取到。
jsdom.env(uri, function(err, window) { //都有window了,想干嘛就干嘛吧 }
之后就是获取最终headers里面的location
var urlRes = urllib.request(real_jump_address, { method: 'GET', headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36', 'Upgrade-Insecure-Requests': 1, 'Host': 's.click.taobao.com', 'Referer': uri } }, function(err, data, res) { if (err) { throw err; // you need to handle error } // console.log(res.statusCode); console.log(res.headers.location); // data is Buffer instance // console.log('body ', data.toString()); });
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。
本文永久链接: https://www.gowhich.com/blog/742
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。
本文永久链接: https://www.gowhich.com/blog/742