示例#1
0
        private string[] downloadOne(CsdnResouce cdrs)
        {
            string[] status = { "模拟下载", "成功/失败", "无验证码", "状态信息", "无附加信息" };
            //if (code != "")
            //{
            //    status[3] = "验证码:" + code;
            //}
            status[0] = "模拟下载";
            status[1] = "";
            status[2] = "";
            status[3] = "";
            status[4] = "";
            //Logscomsole(status);
            string url = cdrs.Tag.ToString().Replace("detail", "download");
            string res = new HttpHelpers().GetHtml(new HttpItems()
            {
                URL = url ,
                Container = cc
            }).Html;

            string taskName = "";
            string regexCode = "<meta name=\"description\" content=\"(.*?)\" />";
            Regex reg = new Regex(regexCode);
            taskName = reg.Match(res).Groups[1].Value;
            regexCode = "action=\"(http://download.csdn.net/index.php/source/do_download/(.*?))\"";
            reg = new Regex(regexCode);
            if (reg.IsMatch(res))
            {
                string durl = reg.Match(res).Groups[1].Value;
                // cdrs .Durl = durl;//下载地址
                bool first = true;
                hr_down = new HttpHelpers().GetHtml(new HttpItems()
                {
                    URL = durl,
                    Referer = url,
                    Method = "Post",
                    Container = cc,
                    Allowautoredirect = true,
                    Postdata = "ds=&validate_code=&basic%5Breal_name%5D=&basic%5Bmobile%5D=&basic%5Bemail%5D=&basic%5Bjob%5D=&basic%5Bcompany%5D=&basic%5Bprovince%5D=&basic%5Bcity%5D=&basic%5Bindustry%5D="
                });
                res = hr_down.Html;
            TRUEDOWNLOAD:
                if (res.Contains("您因违反"))
                {
                    status[0] = "模拟下载";
                    status[1] = "失败";
                    status[2] = res ;
                    status[3] = "";
                    status[4] = "";
                    Logscomsole(status );
                    this.Clear();
                    return status;
                }
                if (res != "<script>document.domain='csdn.net';parent.show_validate_pop();</script>")
                {           //模拟点击下载
                    if (saveFile && !string.IsNullOrEmpty(savePath))
                    {

                        if (!Directory.Exists(SavePath))
                        {
                            Directory.CreateDirectory(SavePath);
                        }
                        //href='http://dldx.csdn.net/fd.php?i=391492108198497&s=c936639a4ad2171ef2bee9ae9e706700';

                        try
                        {
                            hr_down = new HttpHelpers().GetHtml(new HttpItems()
                            {
                                URL = res.Substring(res.IndexOf("http"), res.LastIndexOf('\'') - res.IndexOf("http")),
                                Referer = durl,
                                Container = cc,
                                ResultType = ResultType.Byte,
                                Allowautoredirect = true
                            });
                            //hr.ResultByte;  真实文件内容
                            byte[] bty = hr_down.ResultByte;
                            string a = hr_down.Header.Get("Content-Disposition");
                            a = a.Substring(a.LastIndexOf('\'') + 1);
                            a = HttpUtility.UrlDecode(a, Encoding.UTF8);
                            //a = Encoding.Default.GetString(Encoding.UTF8.GetBytes (a));
                            //a = Encoding.UTF8.GetString(Encoding .UTF8 .GetBytes (a) );
                            cdrs.Log = a;
                            cdrs.Msg = "已保存";
                            File.WriteAllBytes(SavePath + @"\" + a, bty);
                        }
                        catch (Exception ex)
                        {

                            cdrs.Msg = "保存失败:" + ex.Message;
                        }

                    }
                    status[0] = "模拟下载";
                    status[1] = "成功";
                    status[3] = string.IsNullOrEmpty (cdrs.Name )?"":cdrs .Name ;
                    status[2] = first ?"无验证码":"已智能识别验证码";
                    status[4] = "";
                    //cdrs.Rel = "成功";
                    //cdrs.Msg = res==""?"":"验证码:"+res ;
                    //Logscomsole("", "", "", cdrs);
                    return status ;
                }
                else
                {
                    if (first && getImgVcode != null)
                    {
                        res = getdownVcodeUrl(durl, url);
                        first = false;
                        goto TRUEDOWNLOAD;
                    }
                    status[0] = "模拟下载";
                    status[1] = "失败";
                    status[2] = "多次识别错误或者验证码识别接口出错";
                    status[3] = "";
                    status[4] = "";
                }

            }
            else
            {
                status[0] = "模拟下载";
                status[1] = "失败";
                status[2] = "获取下载地址失败";
                status[3] = "";
                status[4] = "";
                //Logscomsole(status);
                //cdrs.Rel = "失败";
                //cdrs.Msg = "获取下载抵制失败";
            }

            //Logscomsole("", "", "", cdrs);
            return status ;
        }
示例#2
0
        private string[] commandOne(CsdnResouce item, string code = "")
        {
            string[] status = { "模拟评分", "成功/失败", "无验证码", "状态信息", "无附加信息" };
            if (code != "")
            {
                status[2] = "验证码:"+code ;
            }
            hr_com = new HttpHelpers().GetHtml(new HttpItems() {
                URL = "http://download.csdn.net/index.php/comment/get_comment_data/" + item.Id + @"/1?jsonpcallback=jsonp1448000002880&&t=1448000436379",
                Container = cc,
                Referer = item.Url
            } );

            string rehtml = hr_com.Html.Replace("\\r\\n", "").Replace("\\n", "").Replace("\\t", "").Replace(" ", "");
            rehtml = Decode(rehtml);
            Regex regcont=new Regex (@"user_name\\"">(.*?)<\\\/a><\\\/dt><dd>(.*?)<");
            MatchCollection mccont = regcont.Matches(rehtml);
            rehtml = "";
            foreach (Match  m in mccont )
            {
                if (rehtml.Length < m.Groups[2].Value.Length)
                {
                    rehtml = m.Groups[2].Value;
                }
            }
            //getCommandList();
            long epochS = (DateTime.Now.AddSeconds(-5).ToUniversalTime().Ticks - 621355968000000000) / 10000;
            long epochE = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000;
            //Get评论
            int index = ran.Next(comMsg.Length);
            string commentcon=comMsg [index ]+","+rehtml ;
            string url;

            if ("".Equals(code))
            {
                url = string.Format("http://download.csdn.net/index.php/comment/post_comment?jsonpcallback=jsonp{0}&sourceid={1}&content={2}&rating={3}&t={4}", epochS, item.Id, new XJHTTP().UrlEncoding(item.Name + commentcon ), new Random().Next(3, 6), epochE);
            }
            else
            {
                url = string.Format("http://download.csdn.net/index.php/comment/post_comment?jsonpcallback=jsonp{0}&sourceid={1}&content={2}&txt_validcode={3}&rating={4}&t={5}", epochS, item.Id, new XJHTTP().UrlEncoding(item.Name + commentcon), code, new Random().Next(3, 6), epochE);
            }

            string html = new HttpHelpers().GetHtml(new HttpItems() {
                URL =url ,
                Container =cc
            }).Html;

            //评论成功完成
            if (html.Contains("\"succ\":1"))
            {
                JfCount++;
                status[1] = "成功";
                status[3] = "当前积分:" + JfCount.ToString();
                status[4] = item.Name + comMsg[index];
            }
            else
            {
                status[1] = "失败";
                status[3] = "当前积分:" + JfCount.ToString();

                Regex reg = new Regex("msg\":\"(.+?)\"");
                string msg = new XJHTTP().FromUnicodeString(html);
                MatchCollection mc = reg.Matches(msg);
                if (mc.Count > 0)
                {
                    status[4] = mc[0].Groups[1].Value;
                    //item.Msg = mc[0].Groups[1].Value;
                }
                else
                {
                    status[4] = msg;
                    //item.Msg = msg;
                }

                if ((status[4].Contains("请填写验证码") || status[4].Contains("验证码错误")) && getImgVcode != null)
                {
                    string vcode = getcomVcode("http://download.csdn.net/index.php");
                    if (vcode != "")
                    {
                        return commandOne(item, vcode);
                    }
                }
                else if(msg .Contains ("您因违反"))
                {
                    status[4] = msg;
                    Logscomsole(status );
                    this.Clear();
                    return status;
                }

            }
            return status;
        }
示例#3
0
        private void threadForScan(object param)
        {
            int s, e;
            var p = (Tuple<int[], EventWaitHandle>)param;
            s = p.Item1[0];
            e = p.Item1[1];
            if (s > e)
            {
                Console.WriteLine("线程结束在:"+e.ToString ());
                p.Item2.Set();
                return;
            }
            List<CsdnResouce> tmplist = new List<CsdnResouce>();
            HttpResults    tmpHr = new HttpHelpers ().GetHtml(new HttpItems() {
                URL = "http://download.csdn.net/my/downloads/" + s,
                Container = cc
            });
            string Down2Html = tmpHr.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");
            string result2 = Regex.Replace(Down2Html, @"<!--(.+?)-->", "");
            //SetList(result2);
            //获取资源列表
            Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\">(.+?)</div><h3><ahref=\"(.+?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>");
            MatchCollection mc = reg.Matches(result2);
            if (mc.Count > 0)
            {
                foreach (Match item in mc)
                {
                    CsdnResouce cdsr = new CsdnResouce();

                    Regex regCState = new Regex("<(.+?)>(.+?)</(.+?)>");
                    MatchCollection mcCState = regCState.Matches(item.Groups[3].Value);
                    string sta = mcCState[0].Groups[2].Value;
                    if (sta.Contains("已评价") || sta.Contains("资源已删除"))
                    {
                        continue;
                    }
                    if (!sta.Contains("立即评价"))
                    {
                        PreComCount++;
                        continue;
                    }
                    CanComCount++;
                    String strt = item.Groups[4].Value;
                    cdsr.Url = "http://download.csdn.net" + strt.Substring(0, strt.IndexOf("\""));
                    cdsr.Name = item.Groups[5].Value;
                    cdsr.Point = item.Groups[6].Value;
                    string[] ids = cdsr.Url.Split('/');
                    cdsr.Id = ids[ids.Length - 1];
                    tmplist.Add(cdsr);
                }
            }
            if (tmplist.Count > 0)
            {
                lock (LockObject)
                {
                    listConSource.AddRange(tmplist );
                }
            }
            s++;
            new Thread(new ParameterizedThreadStart(threadForScan))
                    .Start(new Tuple<int[], EventWaitHandle>(new int[] { s, e }, p .Item2 ));
        }
示例#4
0
        private void getUploadRs()
        {
            // Logscomsole(status);
            HttpHelpers helper_up = new HttpHelpers();
            HttpItems items_up = new HttpItems();
            HttpResults hr_up = new HttpResults();
            string url;
            string rehtml;

            url =string.Format ("http://download.csdn.net/my");
            items_up = new HttpItems() {
                URL = url,
                Container = cc
            };
            hr_up = helper_up.GetHtml(items_up);
            string DownHtml = hr_up.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");
            string result = Regex.Replace(DownHtml, @"<!--(.+?)-->", "");

            //获取下载资源数量
            Regex regDown = new Regex("上传资源:<spanclass=\"red\">(.+?)</span>");
            MatchCollection mcDown = regDown.Matches(result);
            double upCount = 0;
            if (mcDown.Count > 0)
            {
                upCount = Convert.ToDouble(mcDown[0].Groups[1].Value);
            }
            //Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\"></div><h3><ahref=\"(.+?)\"(.*?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>");
            Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\">(<ahref=(.*?)删除</a>)?</div><h3><ahref=\"(.+?)\"(.*?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>");
            MatchCollection mc = reg.Matches(result);
            if (mc.Count > 0)
            {
                foreach (Match item in mc)
                {
                    CsdnResouce cdsr = new CsdnResouce();
                    if (item.Groups.Count == 9)
                    {
                        cdsr.Url = item.Groups[5].Value;
                        cdsr.Name = item.Groups[7].Value;
                        cdsr.Point = item.Groups[8].Value;
                    }
                    else
                    {
                        cdsr.Url = item.Groups[3].Value;
                        cdsr.Name = item.Groups[5].Value;
                        cdsr.Point = item.Groups[6].Value;
                    }
                    //CsdnResouce cdsr = new CsdnResouce(tmp1[6], tmp1[4]);
                    cdsr.Tag = String.Format("http://download.csdn.net{0}", cdsr.Url);
                    uploadedRS.Add(cdsr );
                }
            }
            Logscomsole(new string[] { "获取上传资源", "结束", "共 " + upCount.ToString() + " 个资源", "", "" });
        }
示例#5
0
        private string[] getdownlist()
        {
            getInfo();
              string[] status = { "操作", "成功/失败", "状态信息", "无验证码", "无附加信息" };
              status[0] = "获取下载列表";
              status[1] = "开始";
              status[2] = "随机扫描数据";
              status[3] = "";
              status[4] = "";
            Logscomsole (status );

            String szReg_res_url = ("<li><atitle=\"共(.+?)个资源\"href=\"(.+?)\">(.+?)</a></li>");
            String szReg_res_url_pagecount = ("下一页</a>&nbsp;&nbsp;<aclass=\"pageliststy\"href=\"(.+?)\">尾页</a>");
            String szReg_res_down_url = ("<dt><ahref=\"(.+?)\">(.+?)</a><spanclass=\"marks\">(.+?)</span></dt>");
               // String szReg_res_down_forfree_url = ("<dt><ahref=\"(.+?)\">(.+?)</a><spanclass=\"marks\">0</span></dt>");
            //String szReg_res_down_per_url = ("action=\"(http://download.csdn.net/index.php/source/do_download/(.*?))\"");

            string result = new HttpHelpers().GetHtml(new HttpItems() { URL = "http://download.csdn.net/" }).Html;
            result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");

            Regex reg = new Regex(szReg_res_url);
            MatchCollection mc = reg.Matches(result);
            List<string> strList = new List<string>();

            foreach (Match item in mc)
            {
                //<li><atitle="共685219个资源"href="/c-16006">Java</a></li>
                string tmp = item.Value;
                string[] tmps = tmp.Split(new char[] { '/' });
                tmp = tmp.Substring(tmp.LastIndexOf("=") + 2, tmp.LastIndexOf(@""">") - tmp.LastIndexOf("=") - 2);
                strList.Add(tmp);
            }
            int a = new Random().Next(strList.Count);

            result = new HttpHelpers().GetHtml(new HttpItems() { URL = string.Format("http://download.csdn.net{0}", strList[a]) }).Html;
            result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");

            reg = new Regex(szReg_res_url_pagecount);
            Match mat = reg.Match(result);
            string durl = mat .Groups[1].Value;
            string[] ss = durl.Split(new char[] { '/', '\"' }).Where <string >((o)=>{ return !string.IsNullOrEmpty(o); }).ToArray ();
            int pageCount;
            int.TryParse(ss[1], out pageCount);

            ListPreTDown = new List<CsdnResouce>();

            for (int j = 0; j < pageCount; j++)
            {
                result = new HttpHelpers().GetHtml(new HttpItems()
                {
                    URL = String.Format("http://download.csdn.net{0}/{1}", strList[a], j + 1)

                }).Html;
                result = result.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");
                reg = new Regex(szReg_res_down_url);
                mc = reg.Matches(result);
                // List<string> downstr = new List<string>();
                foreach (Match m in mc)
                {
                    //<dt><ahref="/detail/u014554531/9313813"target="_blank">TakeColor优秀屏幕取色工具</a><spanclass="marks">1</span></dt>
                    string regforhref = "<dt><ahref=\"(.*?)\"target=\"_blank\">(.*?)</a><spanclass=\"marks\">(.*?)</span></dt>";
                    Match mcforhref = new Regex(regforhref).Match(m.Value);
                    string href =mcforhref.Groups[1].Value;
                    string namefor = mcforhref.Groups[2].Value;
                    string co = mcforhref.Groups[3].Value;
                    //string[] tmp1 = m.Value.Split(new char[] { '\"', '>', '<' });
                    if (co  == "0")
                    {
                        CsdnResouce cdsr = new CsdnResouce(namefor ,href );
                        cdsr.Tag = String.Format("http://download.csdn.net{0}", cdsr.Url);
                        ListPreTDown.Add(cdsr);
                    }
                }
            }
            End:
            //string[] status = { "操作", "成功/失败", "状态信息", "无验证码", "无附加信息" };
            //status[0] = "获取下载列表";
            status[1] = "结束";
            status[2] = "可下载数据:" + ListPreTDown.Count.ToString() + " 条";
            //status[3] = "";
            //status[4] = "";
            //Logscomsole();
            return status;
        }
示例#6
0
        private string[] getCommandList()
        {
            listConSource = new List<CsdnResouce>();
            string[] status = { "获取评分列表", "成功/失败", "状态信息", "无验证码", "无附加信息" };
            //status[1] = "结束";
            status[2] = "执行完毕";
            status[3] = "";
            status[4] = "";
               // Logscomsole(status);

            PreComCount = 0;
            CanComCount = 0;

            //我的下载资源页的资源列表
            hr_com = new HttpHelpers().GetHtml(new HttpItems() {
                URL = "http://download.csdn.net/my/downloads",
                Container = cc
            });
            string DownHtml = hr_com.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");
            string result = Regex.Replace(DownHtml, @"<!--(.+?)-->", "");
            //获取下载资源数量
            Regex regDown = new Regex("下载资源:<spanclass=\"red\">(.+?)</span>");
            MatchCollection mcDown = regDown.Matches(result);
             DowCount = 0;
            if (mcDown.Count > 0)
            {
                DowCount = Convert.ToDouble(mcDown[0].Groups[1].Value);
            }
            status[1] = "成功";
            status[2] = "下载数:"+DowCount .ToString ();
            //获取剩余积分
            Regex regJf = new Regex("<em>积分:(.+?)</em>");
            MatchCollection mcJf = regJf.Matches(result);
            if (mcJf.Count > 0)
            {
                int.TryParse(mcJf[0].Groups[1].Value, out jfCount);
            }

            status[3] = "积分数:"+jfCount .ToString ();

            //加载数据,Csdn是6个一页
            double Ys = Math.Ceiling(DowCount / 6);

            //10页以上用多线程
            if (Ys > 50)
            {
                //LoadList(DowCount, Ys);
                int threadCount = 5;
                int cnum = (int)Ys / (threadCount - 1);
                //int ynum = (int)Ys % (threadCount - 1);

                var waits = new List<EventWaitHandle>();
                for (int i = 0; i < threadCount-1; i++)
                {
                    int s = 1 + i * cnum;
                    int e = cnum + cnum * i;
                    if (e > Ys)
                    {
                        e = (int)Ys;
                    }
                    //int e=(((cnum +cnum *i)> DowCount )? (int )DowCount:(cnum +cnum *i)) ;

                    var handler = new ManualResetEvent(false);
                    waits.Add(handler);
                    new Thread(new ParameterizedThreadStart(threadForScan))
                        .Start(new Tuple<int[], EventWaitHandle>(new int[] { s, e }, handler));
                }
                WaitHandle.WaitAll(waits.ToArray());
                status[2] = "下载数:" + DowCount.ToString();
                status[3] = "积分数:" + jfCount.ToString();
                status[4] = "共 " + CanComCount.ToString() + " 条可评分记录," + PreComCount.ToString() + " 条10分钟以内记录";
                return status;
            }
            else
            {
                for (int i = 1; i <= Ys; i++)
                {
                    hr_com = new HttpHelpers().GetHtml(new HttpItems() {

                        URL = "http://download.csdn.net/my/downloads/" + i,
                        Container = cc
                    });
                    string Down2Html = hr_com.Html.Replace("\r", "").Replace("\n", "").Replace("\t", "").Replace(" ", "");
                    string result2 = Regex.Replace(Down2Html, @"<!--(.+?)-->", "");
                    //SetList(result2);
                    //获取资源列表
                    Regex reg = new Regex("<dt><divclass=\"icon\"><imgsrc=\"(.+?)\"title=\"(.+?)\"></div><divclass=\"btns\">(.+?)</div><h3><ahref=\"(.+?)\">(.+?)</a><spanclass=\"points\">(.+?)</span></h3></dt>");
                    MatchCollection mc = reg.Matches(result2);
                    if (mc.Count > 0)
                    {
                        foreach (Match item in mc)
                        {
                            CsdnResouce cdsr = new CsdnResouce();

                            Regex regCState = new Regex("<(.+?)>(.+?)</(.+?)>");
                            MatchCollection mcCState = regCState.Matches(item.Groups[3].Value);
                            string sta = mcCState[0].Groups[2].Value;
                            if (sta.Contains("已评价") || sta.Contains("资源已删除"))
                            {
                                continue;
                            }
                            if (!sta.Contains("立即评价"))
                            {
                                PreComCount++;
                                continue;
                            }
                            CanComCount++;
                            String strt = item.Groups[4].Value;
                            cdsr.Url = strt.Substring(0, strt.IndexOf("\""));
                            cdsr.Name = item.Groups[5].Value;
                            cdsr.Point = item.Groups[6].Value;
                            string[] ids = cdsr.Url.Split('/');
                            cdsr.Id = ids[ids.Length - 1];
                            listConSource.Add(cdsr);
                        }
                    }
                    //status[1] = "结束";
                    //status[2] = "执行完毕";
                    //status[3] = "";
                    status[2] = "已完成扫描 " + i.ToString() + "/" + Ys.ToString();
                    status[3] = "";
                    //Logscomsole(status);
                }
                status[2] = "下载数:" + DowCount.ToString();
                status[3] = "积分数:" + jfCount.ToString();
                status[4] = "共 " + CanComCount.ToString() + " 条可评分记录," + PreComCount.ToString() + " 条10分钟以内记录";
                return status;
            }
            //Logscomsole("获取可评分列表", "结束", "获取到 " + CanComCount.ToString() + " 条可评分记录, " + PreComCount.ToString() + " 条10分钟以内记录");
        }