/// <summary>
        /// 站点登录处理 通过IE
        /// </summary>
        /// <param name="imageSite">站点</param>
        /// <param name="cookie">站点内部cookie, 将返回登录后的cookie, 登录失败为string.Empty</param>
        /// <param name="LoggedFlags">登录成功页面验证字符, 多个字符用|分隔; 无需验证请置null</param>
        /// <param name="Sweb">站点内部SessionClient</param>
        /// <param name="shc">站点内部SessionHeadersCollection</param>
        /// <param name="PageString">返回验证登录时的页面HTML</param>
        /// <returns></returns>
        public static bool LoginSite(ImageSite imageSite, ref string cookie, string LoggedFlags,
                                     ref SessionClient Sweb, ref SessionHeadersCollection shc, ref string pageString)
        {
            string tmp_cookie = CookiesHelper.GetIECookies(imageSite.SiteUrl);
            bool   result     = !string.IsNullOrWhiteSpace(tmp_cookie) && tmp_cookie.Length > 3;

            if (result)
            {
                shc.Timeout = shc.Timeout * 2;
                shc.Set("Cookie", tmp_cookie);
                try
                {
                    pageString = Sweb.Get(imageSite.SiteUrl, Mainproxy, shc);
                    result     = !string.IsNullOrWhiteSpace(pageString);

                    if (result && LoggedFlags != null)
                    {
                        string[] LFlagsArray = LoggedFlags.Split('|');
                        foreach (string Flag in LFlagsArray)
                        {
                            result &= pageString.Contains(Flag);
                        }
                    }

                    cookie = result ? tmp_cookie : cookie;
                }
                catch
                {
                    //有cookie访问时发生超时之类的错误 还是作为用户登录状态 返回true
                    cookie = string.Empty;
                }
            }

            return(result);
        }
Beispiel #2
0
        /// <summary>
        /// Get访问,便捷,自定义UA
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="proxy">代理</param>
        /// <param name="pageEncoding">编码</param>
        /// <param name="UA">user-agent</param>
        /// <returns>网页内容</returns>
        public string Get(string url, IWebProxy proxy, string pageEncoding, string UA)
        {
            SessionHeadersCollection shc = new SessionHeadersCollection();

            shc.UserAgent = UA;
            return(Get(url, proxy, pageEncoding, shc));
        }
Beispiel #3
0
        /// <summary>
        /// Get访问
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="proxy">代理</param>
        /// <param name="pageEncoding">编码</param>
        /// <param name="shc">Headers</param>
        /// <returns>网页内容</returns>
        public string Get(string url, IWebProxy proxy, string pageEncoding, SessionHeadersCollection shc)
        {
            string          ret     = "";
            HttpWebRequest  request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse reponse = null;

            try
            {
                SetHeader(request, url, proxy, shc);

                reponse  = (HttpWebResponse)request.GetResponse();
                m_Cookie = request.CookieContainer;
                Stream       rspStream = reponse.GetResponseStream();
                StreamReader sr        = new StreamReader(rspStream, Encoding.GetEncoding(pageEncoding));
                ret = sr.ReadToEnd();
                sr.Close();
                rspStream.Close();
            }
            catch (Exception e)
            {
                ret = e.Message;
            }
            finally
            {
                if (reponse != null)
                {
                    reponse.Close();
                }
            }
            return(ret);
        }
Beispiel #4
0
        /// <summary>
        /// do in a separate thread
        /// 下载缩略图线程
        /// </summary>
        /// <param name="page"></param>
        /// <param name="count"></param>
        /// <param name="word"></param>
        public void PreFetchPage(int page, int count, string word, ImageSite site)
        {
            (new Thread(new ThreadStart(() =>
            {
                try
                {
                    preFetchedPage = site.GetPageString(page, count, word, proxy);
                    prePage = page;
                    preCount = count;
                    preWord = word;
                    preSite = site;
                    List <Img> imgs = site.GetImages(preFetchedPage, proxy);

                    //获得所有图片列表后反馈得到的数量
                    PreListLoaded(imgs.Count, null);
                    if (imgs.Count < 1)
                    {
                        return;
                    }

                    SessionClient sweb = new SessionClient();
                    SessionHeadersCollection shc = new SessionHeadersCollection();
                    shc.Accept = null;
                    shc.ContentType = SessionHeadersValue.ContentTypeAuto;
                    shc.Add("Accept-Ranges", "bytes");
                    shc.Referer = site.Referer;

                    imgs = site.FilterImg(imgs, MainWindow.MainW.MaskInt, MainWindow.MainW.MaskRes,
                                          MainWindow.MainW.LastViewed, MainWindow.MainW.MaskViewed, true, false);

                    //预加载缩略图
                    foreach (HttpWebRequest req1 in imgReqs)
                    {
                        if (req1 != null)
                        {
                            req1.Abort();
                        }
                    }
                    preFetchedImg.Clear();
                    imgReqs.Clear();

                    //prefetch one by one
                    int cacheCount = CachedImgCount < imgs.Count ? CachedImgCount : imgs.Count;
                    for (int i = 0; i < cacheCount; i++)
                    {
                        WebResponse res = sweb.GetWebResponse(imgs[i].PreviewUrl, proxy, 9000, shc);
                        System.IO.Stream str = res.GetResponseStream();

                        if (!preFetchedImg.ContainsKey(imgs[i].PreviewUrl))
                        {
                            preFetchedImg.Add(imgs[i].PreviewUrl, MainWindow.MainW.CreateImageSrc(str));
                        }
                    }
                }
                catch
                {
                    //Console.WriteLine("useless");
                }
            }))).Start();
        }
Beispiel #5
0
        /// <summary>
        /// Get Response 取回响应 Timeout 20s, Please use Close()
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="proxy">代理</param>
        /// <param name="referer">来源</param>
        /// <returns>WebResponse</returns>
        public WebResponse GetWebResponse(string url, IWebProxy proxy, string referer)
        {
            SessionHeadersCollection shc = new SessionHeadersCollection();

            shc.Referer     = referer;
            shc.Timeout     = 20000;
            shc.ContentType = SessionHeadersValue.ContentTypeAuto;
            return(GetWebResponse(url, proxy, shc.Timeout, shc));
        }
Beispiel #6
0
        /// <summary>
        /// Create HttpWebRequest
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="proxy">代理</param>
        /// <param name="shc">Headers</param>
        /// <returns>HttpWebRequest</returns>
        public HttpWebRequest CreateWebRequest(string url, IWebProxy proxy, SessionHeadersCollection shc)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            try
            {
                SetHeader(request, url, proxy, shc);

                request.CookieContainer  = m_Cookie;
                request.ReadWriteTimeout = 20000;
            }
            catch { }
            return(request);
        }
Beispiel #7
0
        //#############################   Header   #################################################
        private HttpWebRequest SetHeader(HttpWebRequest request, string url, IWebProxy proxy, SessionHeadersCollection shc)
        {
            request.Headers                        = shc;
            request.Proxy                          = proxy;
            request.Accept                         = shc.Accept;
            request.Referer                        = shc.Referer;
            request.Timeout                        = shc.Timeout;
            request.KeepAlive                      = shc.KeepAlive;
            request.UserAgent                      = shc.UserAgent;
            request.CookieContainer                = m_Cookie;
            request.AllowAutoRedirect              = shc.AllowAutoRedirect;
            request.AutomaticDecompression         = shc.AutomaticDecompression;
            request.ContentType                    = shc.ContentType.Contains("auto") ? MimeMapping.GetMimeMapping(url) : shc.ContentType;
            request.ServicePoint.Expect100Continue = false;
            request.ServicePoint.UseNagleAlgorithm = false;
            request.ServicePoint.ConnectionLimit   = 65536;

            return(request);
        }
Beispiel #8
0
        /// <summary>
        /// Post访问
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="postData">Post数据</param>
        /// <param name="proxy">代理</param>
        /// <param name="pageEncoding">编码</param>
        /// <param name="shc">Headers</param>
        /// <returns></returns>
        public string Post(string url, string postData, IWebProxy proxy, string pageEncoding, SessionHeadersCollection shc)
        {
            HttpWebRequest  request = WebRequest.Create(url) as HttpWebRequest;
            HttpWebResponse response;

            byte[] bytesToPost = Encoding.GetEncoding(pageEncoding).GetBytes(postData);
            try
            {
                SetHeader(request, url, proxy, shc);

                request.Method          = "POST";
                request.CookieContainer = m_Cookie;//设置上次访问页面的Cookie 保持Session
                request.ContentLength   = bytesToPost.Length;

                Stream requestStream = request.GetRequestStream();
                requestStream.Write(bytesToPost, 0, bytesToPost.Length);//写入Post数据
                requestStream.Close();

                response = (HttpWebResponse)request.GetResponse();
                m_Cookie = request.CookieContainer;//访问后更新Cookie
                Stream responseStream = response.GetResponseStream();
                string resData        = "";

                using (StreamReader resSR = new StreamReader(responseStream, Encoding.GetEncoding(pageEncoding)))
                {
                    resData = resSR.ReadToEnd();
                    resSR.Close();
                    responseStream.Close();
                }
                return(resData);
            }
            catch (Exception e)
            {
                return(e.Message);
            }
        }
Beispiel #9
0
        /// <summary>
        /// Get Response 取回响应, Please use Close()
        /// </summary>
        /// <param name="url">网址</param>
        /// <param name="proxy">代理</param>
        /// <param name="rwtimeout">读写流超时ReadWriteTimeout</param>
        /// <param name="shc">Headers</param>
        /// <returns>WebResponse</returns>
        public WebResponse GetWebResponse(string url, IWebProxy proxy, int rwtimeout, SessionHeadersCollection shc)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            WebResponse    reponse = null;

            try
            {
                SetHeader(request, url, proxy, shc);

                request.CookieContainer  = m_Cookie;
                request.ReadWriteTimeout = rwtimeout;
                reponse  = request.GetResponse();
                m_Cookie = request.CookieContainer;
            }
            catch { }
            return(reponse);
        }
        /// <summary>
        /// 站点登录处理 通过IE
        /// </summary>
        /// <param name="imageSite">站点</param>
        /// <param name="cookie">站点内部cookie, 将返回登录后的cookie, 登录失败为string.Empty</param>
        /// <param name="LoggedFlags">登录成功页面验证字符, 多个字符用|分隔; 无需验证请置null</param>
        /// <param name="Sweb">站点内部SessionClient</param>
        /// <param name="shc">站点内部SessionHeadersCollection</param>
        /// <returns></returns>
        public static bool LoginSite(ImageSite imageSite, ref string cookie, string LoggedFlags, ref SessionClient Sweb, ref SessionHeadersCollection shc)
        {
            string NullPageString = string.Empty;

            return(LoginSite(imageSite, ref cookie, LoggedFlags, ref Sweb, ref shc, ref NullPageString));
        }
Beispiel #11
0
 /// <summary>
 /// Post访问,默认UTF-8编码
 /// </summary>
 /// <param name="url">网址</param>
 /// <param name="postData">Post数据</param>
 /// <param name="proxy">代理</param>
 /// <param name="shc">Headers</param>
 public string Post(string url, string postData, IWebProxy proxy, SessionHeadersCollection shc)
 {
     return(Post(url, postData, proxy, "UTF-8", shc));
 }
Beispiel #12
0
 /// <summary>
 /// Get访问,默认UTF-8编码
 /// </summary>
 /// <param name="url">网址</param>
 /// <param name="proxy">代理</param>
 /// <param name="shc">Headers</param>
 /// <returns>网页内容</returns>
 public string Get(string url, IWebProxy proxy, SessionHeadersCollection shc)
 {
     return(Get(url, proxy, "UTF-8", shc));
 }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="img">图片</param>
        /// <param name="index">缩略图位置索引</param>
        /// <param name="site">图片站点</param>
        public ImgControl(Img img, int index, IMageSite site)
        {
            InitializeComponent();
            this.site  = site;
            Image      = img;
            this.index = index;
            shc        = site.SiteHeaders;
            shc.Add("Accept-Ranges", "bytes");
            shc.Accept      = null;
            shc.Referer     = site.Referer;
            shc.Timeout     = 12000;
            shc.ContentType = SessionHeadersValue.ContentTypeAuto;

            if (img.IsViewed)
            {
                //statusBorder.Background = new SolidColorBrush(Color.FromArgb(0xCC, 0xFE, 0xE2, 0xE2));
                statusBorder.Background = new SolidColorBrush(Color.FromArgb(0xEE, 0xE9, 0x93, 0xAA));
            }

            //try
            //{
            //string s = .Substring(img.Score.IndexOf(' '), img.Score.Length - img.Score.IndexOf(' '));
            //score.Text = img.Score.ToString();
            //}
            //catch { }

            /*
             * if (!supportScore)
             * {
             *  brdScr.Visibility = System.Windows.Visibility.Hidden;
             * }*/

            //chk.Text = img.Dimension;

            //RenderOptions.SetBitmapScalingMode(preview, BitmapScalingMode.Fant);
            preview.DataContext = img;

            preview.SizeChanged  += new SizeChangedEventHandler(Preview_SizeChanged);
            preview.ImageFailed  += new EventHandler <ExceptionRoutedEventArgs>(preview_ImageFailed);
            preview.MouseUp      += new MouseButtonEventHandler(preview_MouseUp);
            statusBorder.MouseUp += new MouseButtonEventHandler(preview_MouseUp);
            chk.MouseUp          += new MouseButtonEventHandler(preview_MouseUp);
            txtDesc.MouseUp      += new MouseButtonEventHandler(preview_MouseUp);

            downBtn.MouseUp += new MouseButtonEventHandler(Border_MouseUp);
            magBtn.MouseUp  += new MouseButtonEventHandler(preview_Click);

            //chk.Click += chk_Checked;

            //ToolTip tip = preview.ToolTip as ToolTip;
            //tip.PlacementTarget = preview.Parent as UIElement;
            //TextBlock desc = (tip.Content as Border).Child as TextBlock;

            //下载缩略图
            //DownloadImg();

            if (img.DownloadDetail != null)
            {
                //need detail
                LayoutRoot.IsEnabled = false;
                //isRetrievingDetail = true;
                chk.Text = "信息未加载";
            }
            else
            {
                ShowImgDetail();
            }
        }