Nodejs 接口之 解析淘宝客短链

{app.params.name}} {app.params.name}} {app.params.name}}

给你一个淘宝客的短链,如果获取他跳转后的地址,这是我最近在做个一个程序,使用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国际许可证。

本文首发于 Gowhich 博客( https://www.gowhich.com ),版权所有,侵权必究。

本文永久链接: https://www.gowhich.com/blog/742

comments powered by Disqus