/// <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); }
/// <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)); }
/// <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); }
/// <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(); }
/// <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)); }
/// <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); }
//############################# 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); }
/// <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); } }
/// <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)); }
/// <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)); }
/// <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(); } }