/// <summary>
        /// 验证码图片
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                context.Response.ClearContent();
                context.Response.ContentType = "image/Jpeg";

                var vc   = new ValCode();
                var code = vc.CreateValidateCode(4);

                HttpCookie hc = new HttpCookie("validatecode", code);
                TimeSpan   ts = new TimeSpan(0, 2, 0);//2分钟
                hc.Expires = DateTime.Now.Add(ts);
                context.Response.Cookies.Set(hc);

                var codeImg = vc.CreateValidateGraphic(code);
                context.Response.BinaryWrite(codeImg);
            }
            catch
            {
            }
        }
Example #2
0
        private async void btn_CloseClick(object sender, RoutedEventArgs e)
        {
            string         ValCode;
            string         resHtml;
            HttpWebRequest request;
            List <KeyValuePair <string, string> > nameValueCollection = new List <KeyValuePair <string, string> >();
            CookieContainer cookieContainer        = new CookieContainer();
            string          FormData_Name_SupplyNo = "ctl00$contentPlaceHolder$txtSupplyNo";
            string          FormData_Name_Password = "******";
            string          FormData_Name_ValCode  = "ctl00$contentPlaceHolder$txtValCode";
            string          Page_Login             = "******";
            string          Page_LoginImg          = "https://amis.afa.gov.tw/CreateValidationCodeImage.aspx";
            string          Page_QueryPrice        = "https://amis.afa.gov.tw/coop1/CoopVegSupplierTransInfoQuery.aspx";
            string          Check_PageIsQueryPrice = "CoopVegSupplierTransInfoQuery";
            string          Request_UserAgent      = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36";
            string          Request_Accept         = "*/*";
            string          Request_ContentType    = "application/x-www-form-urlencoded";

            #region -- 登入帳號Flow --

            #region -- 1.Post登入資料組成 --

Page_LoginPost:

            #region -- A.導覽登入頁面,並且取得相關Cookie資訊 以及 組成Post資料相關資訊的物件 --

            request = (HttpWebRequest)HttpWebRequest.Create(Page_Login);
            request.CookieContainer = cookieContainer;
            //set the user agent and accept header values, to simulate a real web browser
            request.UserAgent = Request_UserAgent;
            request.Accept    = Request_Accept;
            //SET AUTOMATIC DECOMPRESSION
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            resHtml = Use_WebClient.Get_ResponseHtml(ref request);

            nameValueCollection.Clear();
            nameValueCollection.AddRange(await Crawler.Todo_AngleSharp.GetHtmlDocument(resHtml, "form input"));
            #endregion

            #region -- B.取得驗證碼 --

            request = (HttpWebRequest)HttpWebRequest.Create(Page_LoginImg);
            request.CookieContainer        = cookieContainer;
            request.UserAgent              = Request_UserAgent;
            request.Accept                 = Request_Accept;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            var img_byte = Use_WebClient.Get_ResponseImg(ref request);
            ValCode          = Crawler.Todo_Tesseract3_3.GetImgText(img_byte);
            ValCode          = (ValCode.Length > 4) ? ValCode.Substring(0, 4) : ValCode;
            lbl_Code.Content = ValCode;
            using (var ms = new MemoryStream(img_byte))
            {
                Img_Code.Source = BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);;
            }


            #endregion

            #region -- C.填寫帳號登入等相關資訊 --

            //__ASYNCPOST 以及 ctl00$ScriptManager_Master無法從html得知,所以才用手動寫入的方式填寫
            DataCollation.ListItemReplace(ref nameValueCollection, "__ASYNCPOST", "true");
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00$ScriptManager_Master", "ctl00$contentPlaceHolder$UpdatePanel1|ctl00$contentPlaceHolder$btnLogin");
            DataCollation.ListItemReplace(ref nameValueCollection, FormData_Name_SupplyNo, txt_SupplyNo.Text);
            DataCollation.ListItemReplace(ref nameValueCollection, FormData_Name_Password, pad_Password.Password);
            DataCollation.ListItemReplace(ref nameValueCollection, FormData_Name_ValCode, ValCode);

            #endregion

            #endregion

            #region -- 2.登入Post請求發送 --

            request = (HttpWebRequest)HttpWebRequest.Create(Page_Login);
            request.CookieContainer        = cookieContainer;
            request.UserAgent              = Request_UserAgent;
            request.Accept                 = Request_Accept;
            request.Method                 = "POST";
            request.ContentType            = Request_ContentType;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            string data  = string.Join("&", nameValueCollection.Select(x => string.Format("{0}={1}", WebUtility.UrlEncode(x.Key), WebUtility.UrlEncode(x.Value))));
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            request.ContentLength = bytes.Length;
            Use_WebClient.WriteFormDataIntoRequest(ref request, bytes);
            resHtml = Use_WebClient.Get_ResponseHtml(ref request);
            resHtml = WebUtility.UrlDecode(resHtml);

            if (resHtml.IndexOf(Check_PageIsQueryPrice) < 0)
            {
                goto Page_LoginPost;
            }

            #endregion

            #endregion

            #region -- 取得水果相關資訊 --

            #region -- 1.進入登入後的頁面 --

            request = (HttpWebRequest)HttpWebRequest.Create(Page_QueryPrice);
            request.CookieContainer        = cookieContainer;
            request.UserAgent              = Request_UserAgent;
            request.Accept                 = Request_Accept;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            resHtml = Use_WebClient.Get_ResponseHtml(ref request);
            nameValueCollection.Clear();
            nameValueCollection.AddRange(await Crawler.Todo_AngleSharp.GetHtmlDocument(resHtml, "form input[type='text']"));
            nameValueCollection.AddRange(await Crawler.Todo_AngleSharp.GetHtmlDocument(resHtml, "form input[type='hidden']"));
            nameValueCollection.AddRange(await Crawler.Todo_AngleSharp.GetHtmlDocument(resHtml, "form select"));
            nameValueCollection.AddRange(await Crawler.Todo_AngleSharp.GetHtmlDocument(resHtml, "span#ctl00_contentPlaceHolder_ucCoopVegFruitMarket_chklMarket", "104,109"));
            DataCollation.ListItemReplace(ref nameValueCollection, "__ASYNCPOST", "true");
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00$contentPlaceHolder$btnQuery", "查詢");
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00$contentPlaceHolder$txtProductNo", "O");
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00$ScriptManager_Master", "ctl00$ScriptManager_Master|ctl00$contentPlaceHolder$btnQuery");
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00_contentPlaceHolder_ucCoopVegFruitMarket", "109,104");
            CultureInfo culture = new CultureInfo("zh-TW");
            culture.DateTimeFormat.Calendar = new TaiwanCalendar();
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00$contentPlaceHolder$txtStartDate", dap_Start.SelectedDate.Value.ToString("yyy/MM/dd", culture));
            DataCollation.ListItemReplace(ref nameValueCollection, "ctl00$contentPlaceHolder$txtEndDate", dap_End.SelectedDate.Value.ToString("yyy/MM/dd", culture));
            #endregion

            #region -- 2.Post查詢資料 --

            request = (HttpWebRequest)HttpWebRequest.Create(Page_QueryPrice);
            request.CookieContainer        = cookieContainer;
            request.UserAgent              = Request_UserAgent;
            request.Accept                 = Request_Accept;
            request.Method                 = "POST";
            request.ContentType            = Request_ContentType;
            request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
            string data1  = string.Join("&", nameValueCollection.Select(x => string.Format("{0}={1}", WebUtility.UrlEncode(x.Key), WebUtility.UrlEncode(x.Value))));
            byte[] bytes1 = Encoding.UTF8.GetBytes(data1);
            request.ContentLength = bytes1.Length;
            Use_WebClient.WriteFormDataIntoRequest(ref request, bytes1);
            resHtml = Use_WebClient.Get_ResponseHtml(ref request);
            resHtml = WebUtility.HtmlDecode(resHtml);

            #endregion

            #region -- 3.
            List <VegFruitMarketSupplyPrice> supplyPrices = new List <VegFruitMarketSupplyPrice>();
            var table_data = await Crawler.Todo_AngleSharp.GetVegFruitMarketData(resHtml, "table tr.main_main");

            foreach (var tr in table_data)
            {
                var temp_tr = new VegFruitMarketSupplyPrice();
                var prop    = temp_tr.GetType().GetProperties();

                for (int i = 0; i < prop.Length; i++)
                {
                    var temp_count = tr.Count;
                    var temp_val   = (temp_count < i) ? string.Empty : tr[i];
                    prop[i].SetValue(temp_tr, temp_val);
                }
                supplyPrices.Add(temp_tr);
            }

            dag_Show.ItemsSource = supplyPrices;
            #endregion

            #endregion
        }