苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

123
返回列表 发新帖
楼主: ale0320

[HttpHelper] 淘宝客短链接,转商品链接,最后一步老是取不到 Location

[复制链接]
发表于 2016-11-21 14:34:33 | 显示全部楼层
或者你直接说清楚你要做什么功能,


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2016-11-21 14:53:20 | 显示全部楼层
本帖最后由 ale0320 于 2016-11-21 14:57 编辑
站长苏飞 发表于 2016-11-21 14:34
或者你直接说清楚你要做什么功能,

[C#] 纯文本查看 复制代码
        private string taobaoduanlianjie(string Url)
        {
            HttpHelper http = new HttpHelper();
            HttpItem item = new HttpItem()
            {
                URL = Url,//URL     必需项    
                Method = "get",//URL     可选项 默认为Get   
                ContentType = "text/html",//返回类型    可选项有默认值   
                Allowautoredirect = false//默认为False就是不根据重定向自动跳转
            };
            HttpResult result = http.GetHtml(item);

            HttpHelper http2 = new HttpHelper();
            HttpItem item2 = new HttpItem()
            {
                URL = result.Header[HttpResponseHeader.Location],//URL     必需项    
                Method = "get",//URL     可选项 默认为Get   
                ContentType = "text/html",//返回类型    可选项有默认值   
                Allowautoredirect = false,//默认为False就是不根据重定向自动跳转
            };
            HttpResult result2 = http2.GetHtml(item2);
            string t_M = result.Header[HttpResponseHeader.Location].ToString();
            string t_js = result2.Header[HttpResponseHeader.Location].ToString();
            string et = t_js.Substring(t_js.IndexOf("et%3D") + 5, t_js.Length - (t_js.IndexOf("et%3D") + 5));           
            string diyibufen = "http" + Between(t_js, "http", "ref%3D") + "ref%3D";
            string dierbufen = "%26et%3D" + et;
            t_js = diyibufen + dierbufen;
            string zuihouyibu_url = System.Web.HttpUtility.UrlDecode(t_M) + "&ref=&et=" + et;

            HttpHelper http3 = new HttpHelper();
            HttpItem item3 = new HttpItem()
            {
                URL = zuihouyibu_url,//URL     必需项    
                Method = "get",//URL     可选项 默认为Get   
                ContentType = "text/html",//返回类型    可选项有默认值   
                Allowautoredirect = false,//默认为False就是不根据重定向自动跳转
                Referer = t_js,//来源URL     可选项   
            };
            HttpResult result3 = http3.GetHtml(item3);
            return result3.RedirectUrl;
        }




[C#] 纯文本查看 复制代码
        /// <summary>
        /// 取文本中间内容
        /// </summary>
        /// <param name="str">原文本</param>
        /// <param name="leftstr">左边文本</param>
        /// <param name="rightstr">右边文本</param>
        /// <returns>返回中间文本内容</returns>
        public static string Between(string str, string leftstr, string rightstr)
        {
            int i = str.IndexOf(leftstr) + leftstr.Length;
            string temp = str.Substring(i, str.IndexOf(rightstr, i) - i);
            return temp;
        }

 楼主| 发表于 2016-11-21 14:55:28 | 显示全部楼层
站长苏飞 发表于 2016-11-21 14:34
或者你直接说清楚你要做什么功能,

放到C#里面,直接调用就行,
淘宝客短链接,转,商品长链接
不好意思,上面可能是我真没说清楚,我发易语言那个图片,没别的意思,只是因为图片上有步骤,而且简单
发表于 2016-11-21 15:12:35 | 显示全部楼层
首先可以肯定的一点是,你在最后一步发过去的链接本身就没有301之类的跳转,因为我直接把URL放到浏览也是显示的无
https://s.click.taobao.com/t_js?tu=https://s.click.taobao.com/t?e=m=2&s=zPyBVYbxVUkcQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67urypqXMBYXzUOZr0mLjusfCIBmcflctCwqTTQrFEmo0kQMLJEDFGnUFb2zmVc1DmK4+L2SXLlS4lrfKbc84rldjtsiJT+8BUkPtqmwwPsDUxiXvDf8DaRs=&pvid=10_123.52.122.74_482_1479710492039&ref=&et=JIafSVOZ4XVk5hSuBcm5BDYmARoYrJUv&ref=&et=JIafSVOZ4XVk5hSuBcm5BDYmARoYrJUv

你再检查一下应该是前两步提取的数据有问题
调试可以看到
第一步是这样的
[C#] 纯文本查看 复制代码
https://s.click.taobao.com/t?e=m%3D2%26s%3DzPyBVYbxVUkcQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67urypqXMBYXzUOZr0mLjusfCIBmcflctCwqTTQrFEmo0kQMLJEDFGnUFb2zmVc1DmK4%2BL2SXLlS4lrfKbc84rldjtsiJT%2B8BUkPtqmwwPsDUxiXvDf8DaRs%3D&pvid=10_123.52.122.74_482_1479710492039


第二步是请求上面的得到如下
[C#] 纯文本查看 复制代码
https://s.click.taobao.com/t_js?tu=https%3A%2F%2Fs.click.taobao.com%2Ft%3Fe%3Dm%253D2%2526s%253DzPyBVYbxVUkcQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67urypqXMBYXzUOZr0mLjusfCIBmcflctCwqTTQrFEmo0kQMLJEDFGnUFb2zmVc1DmK4%252BL2SXLlS4lrfKbc84rldjtsiJT%252B8BUkPtqmwwPsDUxiXvDf8DaRs%253D%26pvid%3D10_123.52.122.74_482_1479710492039%26ref%3Dhttps%253A%252F%252Fs.click.taobao.com%252Ft%253Fe%253Dm%25253D2%252526s%25253DzPyBVYbxVUkcQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67urypqXMBYXzUOZr0mLjusfCIBmcflctCwqTTQrFEmo0kQMLJEDFGnUFb2zmVc1DmK4%25252BL2SXLlS4lrfKbc84rldjtsiJT


说明这步可能就已经错了。

你应该是要这样的一个功能,根据淘宝客短链接获取实际的商品链接对吧。
这个功能我记得不是这样做的
发表于 2016-11-21 15:28:18 | 显示全部楼层
[C#] 纯文本查看 复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="always" name="referrer">
</head>
<body>
<script type='text/javascript'> 
function htmlspecialchars(str){  
    str = str.replace(/</g, '<');
    str = str.replace(/>/g, '>');
    str = str.replace(/"/g, '"');
    str = str.replace(/'/g, ''');
    return str;
}
 
function bol(){
    if (top.location != self.location) {
        return false;
    }
    var schema = (("https:" == document.location.protocol) ? "https" : "http");
    var qs = location.search.split("?")[location.search.split("?").length-1].split("&");
    qso = {};
    for (var i=0; i<qs.length; i++){
        if (qs[i]!="") {
            var tmpa = qs[i].split("=");
            qso[tmpa[0]] = tmpa[1] ? tmpa[1] : "";
        }
    }
    
    if(!qso.tu){
        exit;
    } 
    
    var jump_url;
    if (qso.tu.indexOf("https") === 0){
        jump_url = qso.tu.substr(5);
    } else if(qso.tu.indexOf("http") === 0){
        jump_url = qso.tu.substr(4);
    }else{
        exit;
    }
    
    var jump_address = schema+jump_url;
 
    var real_jump_address = unescape(jump_address);
    if (htmlspecialchars(real_jump_address).length != real_jump_address.length) {
        exit;
    }
   
    if (jump_url.indexOf("%3A%2F%2Fs.click.taobao.com%2F")===0
        || jump_url.indexOf("%3A%2F%2Fi.click.taobao.com%2F")===0
        || jump_url.indexOf("%3A%2F%2Fglobal.click.taobao.com%2F")===0
        || jump_url.indexOf("%3A%2F%2Fs.click.alimama.com%2F")===0
        || jump_url.indexOf("%3A%2F%2Fitem8.taobao.com%2F")===0
        || jump_url.indexOf("%3A%2F%2Fshop8.taobao.com%2F")===0
    ) {
        if (!window.attachEvent) {
            document.write('<input style="display:none" type="button" id="exe" value="">');
            document.getElementById('exe').click();
        } else {
            document.write('<a style="display:none" href="' + real_jump_address + '" id="exe"></a>');
            document.getElementById('exe').click();
        }
    }
}//end of bol()
bol();
</script>
</body>
</html>

最后一个链接返回的是这样 一个页面,而这个说明真正的链接是通过JS生成的

 楼主| 发表于 2016-11-21 16:36:25 | 显示全部楼层
站长苏飞 发表于 2016-11-21 15:28
[mw_shl_code=csharp,true]

QQ图片20161121163541.png

最后一个链接,也是取的协议头,商品链接在协议头里,看代码
 楼主| 发表于 2016-11-22 16:45:42 | 显示全部楼层
站长苏飞 发表于 2016-11-21 15:28
[mw_shl_code=csharp,true]

老大,代码也发出来了,看看哦!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-28 13:35

© 2014-2021

快速回复 返回顶部 返回列表