将淘宝客加密链接转换成普通淘宝链接
1,先获取淘宝客链接一枚:
$clickurl="http://s.click.taobao.com/t?e=m%3D2%26s%3D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%2B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%2FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%2B2Cp2Y4AZdQRGST%2FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%2FWo6QkJXpnEKIlIBiOAf%2BiEiH3X0n4yiZ%2BQMlGz6FQ%3D%3D";
2,PHP获取初步跳转后的URL:
$headers = get_headers($clickurl, TRUE);
$tu = $headers['Location'];
得到链接如下:
$tu="http://s.click.taobao.com/t_js?tu=http%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3Dm%253D2%2526s%253D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%252B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%252FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%252B2Cp2Y4AZdQRGST%252FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%252FWo6QkJXpnEKIlIBiOAf%252BiEiH3X0n4yiZ%252BQMlGz6FQ%253D%253D%26ref%3D%26et%3DU1NBEMyybRSMZqT%252FAdx5AObU6XqsSK9q";
因此链接中带有一个参数tu,后面要用到,所以将此链接取名为tu,继续第三步。
3,取得tu链接中的tu参数,也就是等号后面的内容:
http%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3Dm%253D2%2526s%253D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%252B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%252FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%252B2Cp2Y4AZdQRGST%252FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%252FWo6QkJXpnEKIlIBiOAf%252BiEiH3X0n4yiZ%252BQMlGz6FQ%253D%253D%26ref%3D%26et%3DU1NBEMyybRSMZqT%252FAdx5AObU6XqsSK9q
对编码熟悉的同学应该看出来了这其实是一条URL地址被escape编码了,我们使用php自定义一个解码函数对其进行处理一下,网上找到的unescape解码函数:
function unescape($str) { $ret = ''; $len = strlen($str); for ($i = 0; $i < $len; $i ++) { if ($str[$i] == '%' && $str[$i + 1] == 'u') { $val = hexdec(substr($str, $i + 2, 4)); if ($val < 0x7f) $ret .= chr($val); else if ($val < 0x800) $ret .= chr(0xc0 | ($val >> 6)) . chr(0x80 | ($val & 0x3f)); else $ret .= chr(0xe0 | ($val >> 12)) . chr(0x80 | (($val >> 6) & 0x3f)) . chr(0x80 | ($val & 0x3f)); $i += 5; } else if ($str[$i] == '%') { $ret .= urldecode(substr($str, $i, 3)); $i += 2; } else $ret .= $str[$i]; } return $ret; }
解码后得到的URL地址为:
$ref="http://s.click.taobao.com/t?e=m%3D2%26s%3D1xJRigdN6vgcQipKwQzePOeEDrYVVa64REOHN%2B0iJT23bLqV5UHdqdSm9rmNrfhQMlIj6E1wLr6Z1upWVE%2FY63jUGTUkifoD6Iu7YpSAkMmDDvvObppylOm%2B2Cp2Y4AZdQRGST%2FOE66WnyaKIIfB45Ka7uvYZB3KIXgUnhszXk7H%2FWo6QkJXpnEKIlIBiOAf%2BiEiH3X0n4yiZ%2BQMlGz6FQ%3D%3D&ref=&et=Tu9eFLz3gxx7bGejK8KgtemqA%2BR0RX35";
这地址跟我们获取的淘宝客链接几乎相同,就是后面多了两个参数,一个ref,一个et,这里我们把这个地址命名为ref。
淘宝客链接的跳转其实就是一个封装的js程序,通过JS发起带有header参数的请求从而达到跳转的,这个header参数中最重要的就是referer,下面我就用PHP模拟请求一下这个地址:
请求后的结果输出跳转后的302头部信息,里面已经有我们想要的淘宝商品实际地址了。
以下是完整的提取淘宝URL函数:
function geturl($clickurl){ $headers = get_headers($clickurl, TRUE); $tu = $headers['Location']; $eturl = unescape($tu); $u = parse_url($eturl); $param = $u['query']; $ref = str_replace('tu=', '', $param); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ref); curl_setopt($ch, CURLOPT_REFERER, $tu); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_NOBODY,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch, CURLOPT_MAXREDIRS,2); $out = curl_exec($ch); $dd = curl_getinfo($ch); curl_close($ch); $item_url = $dd['url']; return $item_url; }
另外说明一下,curl中如果这个CURLOPT_FOLLOWLOCATION参数无效,很有可能是PHP运行模式问题,可以使用其他方法替代。示例:
function geturl($clickurl){ $headers = get_headers($clickurl, TRUE); $tu = $headers['Location']; $eturl = unescape($tu); $u = parse_url($eturl); $param = $u['query']; $ref = str_replace('tu=', '', $param); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ref); curl_setopt($ch, CURLOPT_REFERER, $tu); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_NOBODY,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true); curl_setopt($ch, CURLOPT_MAXREDIRS,2); $out = curl_exec($ch); $dd = curl_getinfo($ch); curl_close($ch); if($dd['redirect_url']){ $item_url= $dd['redirect_url']; }else{ if($dd['url']){ $item_url= $dd['url']; }else{ $chl = curl_init(); curl_setopt($chl, CURLOPT_URL, $et); curl_setopt($chl, CURLOPT_REFERER, $tu); curl_setopt($chl, CURLOPT_HEADER, true); curl_setopt($chl, CURLOPT_NOBODY,1); curl_setopt($chl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($chl, CURLOPT_FOLLOWLOCATION,true); curl_setopt($chl, CURLOPT_MAXREDIRS,2); $out = curl_exec($chl); curl_close($chl); $item_url= get_word($out,'Location: ','&ali_trackid'); } } return $item_url; }
http://bbs.yangtata.com/forum.php?mod=viewthread&tid=4182
相关文章
mysql_connect与mysql_pconnect的区别详解
在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25- PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
- 由于要使用mikoomi mongodb plugin插件,所以需要php对mongodb的扩展支持,默认通过源安装的php并没有mongodb的扩展支持,具体可以通过php -m|grep mongo 验证 。这里就结...2016-11-25
- 下面来给各位同学介绍一个php身份证校验码的计算例子,希望本函数代码能帮助到各位同学哦。 例子 代码如下 复制代码 public function id_ver...2016-11-25
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25- 最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个...2016-11-25
- 下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
- 我们经常会在网站中看到可以直接把网站以快捷方式保存到自己的电脑中,然后只要点击就可以实现进入网了,那么php中怎么把网页添加到桌面快捷方式呢。 功能简单,直接上...2016-11-25
- php5.3或以上版本可以使用php管理crontab计划任务,下面我先来体验一下,有需要学习了解的朋友可进入参考。 1.使用php-crontab-manager管理计划任务 要求 PHP>=5.3...2016-11-25
- SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作 标准注入语句1.判...2016-11-25
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
php中json_decode()和json_encode()用法与中文不显示解决办法
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 编译安装非常的简单了我们现在的php版本已经到了php7了,下文小编来为各位介绍一篇关于PHP7快速编译安装的步骤,希望文章能够帮助到各位。 一、安装必要一些依赖 yum...2016-11-25
- 我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25