コード例 #1
0
        /// <summary>
        /// 比较新品并上架
        /// </summary>
        /// <returns></returns>
        public bool CarepareAndUpItem()
        {
            BaseReadWebPage newItem    = new BaseReadWebPage();
            BaseReadWebPage downItem   = new BaseReadWebPage();
            BaseReadWebPage onlineItem = new BaseReadWebPage();

            newItem.ReadBaseItemInfo("TK/低于20以上.csv", true);
            downItem.ReadBaseItemInfo("TKAdmin/down.csv", true);
            onlineItem.ReadBaseItemInfo("TKAdmin/TKAdmin.csv", true);

            Http.HttpRequest http = new Http.HttpRequest();
            http.CookieContainer = Login();

            foreach (string key in newItem.ShopAllItems.Keys)
            {
                if (onlineItem.ShopAllItems.ContainsKey(key))
                {
                    continue;
                }

                if (downItem.ShopAllItems.ContainsKey(key))
                {
                    downItem.ShopAllItems[key].ShopPrice = newItem.ShopAllItems[key].ShopPrice;
                    ReUpItem(downItem.ShopAllItems[key], http);
                    CommonFun.WriteCSV("TKAdmin/need_reUp.csv", downItem.ShopAllItems[key]);
                    continue;
                }

                UpNewItem(newItem.ShopAllItems[key], http);

                CommonFun.WriteCSV("TKAdmin/new" + fileName + ".csv", newItem.ShopAllItems[key]);
            }

            return(true);
        }
コード例 #2
0
        public Message CreateMessage(IHeaderDictionary headers, Http.HttpRequest request)
        {
            var m = CreateMessage(headers);

            m.Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request));
            return(m);
        }
コード例 #3
0
        public async Task RecordSessionAsync(Http.HttpRequest request, Http.HttpResponse response, TimeSpan duration)
        {
            int sessionId = -1;

            lock (this)
            {
                sessionId = nextSessionNumber++;
            }

            // Write client request
            var requestPart = this.outputPackage.CreatePart(UriForPart(sessionId, 'c'), "text/plain");

            using (var requestStream = requestPart.GetStream(System.IO.FileMode.Create))
            {
                await request.WriteToStreamAsync(requestStream);
            }

            var responsePart = this.outputPackage.CreatePart(UriForPart(sessionId, 's'), "text/plain");

            using (var responseStream = responsePart.GetStream(System.IO.FileMode.Create))
            {
                await response.WriteToStreamAsync(responseStream);
            }

            var metadataPart = this.outputPackage.CreatePart(UriForPart(sessionId, 'm'), "application/xml");
            var metadata     = CreateMetadataForSession(sessionId, request.StartTime, duration);

            using (var metadataStream = metadataPart.GetStream(System.IO.FileMode.Create))
            {
                await metadata.WriteToStreamAsync(metadataStream);
            }
        }
コード例 #4
0
        public bool UpAllNewItme()
        {
            BaseReadWebPage newItem = new BaseReadWebPage();

            newItem.ReadBaseItemInfo("TKAdmin/new.csv", true);

            Http.HttpRequest http = new Http.HttpRequest();

            int totalCount = newItem.ShopAllItems.Count;

            int curCount = 0;

            foreach (BaseItemInfo item in newItem.ShopAllItems.Values)
            {
                if (curCount % 100 == 0)
                {
                    http.CookieContainer = Login();
                }

                UpNewItem(item, http);

                curCount++;

                Console.WriteLine("{0}:UpNewItem,TotalCount{1}, curCount:{2}", DateTime.Now, totalCount, curCount);
            }

            return(true);
        }
コード例 #5
0
        /// <summary>
        /// 上架新物品
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool UpNewItem(BaseItemInfo item, Http.HttpRequest http)
        {
            if (item.ShopPrice < 5)
            {
                return(false);
            }
            //find
            string findUrl      = "https://admin.tkyfw.com/Goods/findExp";
            string findPostData = "store_id=34";

            http.HttpPost(findUrl, findPostData);

            //findApp
            string findAppUrl      = "https://admin.tkyfw.com/Goods/findAppNum";
            string findAppPostData = string.Format("appNum:{0}", item.ID);

            http.HttpPost(findAppUrl, findAppPostData);

            string url = string.Format("https://admin.tkyfw.com/Goods/complateInfo?cat_first=&cat_second=&cat_third=&approval_number={0}", item.ID);

            string upNewItemUrl = "https://admin.tkyfw.com/Goods/findRepeatCheck";

            string checkUrl = "https://admin.tkyfw.com/Goods/checkGoods";

            string content = http.HttpGet(url);


            MatchCollection ms = CommonFun.GetValues(content, "gxtj_ul", "</li>");

            foreach (Match m in ms)
            {
                string fromat = CommonFun.GetValue(m.Value, "<span>", "<span>");

                fromat = CommonFun.FormatStr(fromat, item.Name);

                if (fromat == item.Format)
                {
                    string boxStr = CommonFun.GetValue(m.Value, "\"checkbox\"", "/>");

                    string value = CommonFun.GetValue(boxStr, "value=\"", "\"");

                    string result = http.HttpPost(upNewItemUrl, string.Format("value_arr={0}{1}", value, HttpUtility.UrlEncode(",")));

                    result = CommonFun.GetValue(result, ":", "}");

                    if (result == "2")
                    {
                        CommonFun.WriteCSV("TKAdmin/UpNew" + fileName + ".csv", item);
                        http.HttpPost(checkUrl, "", url, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", null);
                        Console.WriteLine("UpNewItem,name:{0}, id:{1}, fromat:{2}", item.Name, item.ID, item.Format);
                    }
                    Thread.Sleep(random.Next(3, 6) * 1000);


                    // UpdatePrice(item, http);
                }
            }

            return(true);
        }
コード例 #6
0
        /// <summary>
        /// 是否可以接
        /// </summary>
        /// <returns></returns>
        public bool CanTake(string content, Http.HttpRequest http)
        {
            string infoStr = CommonFun.GetValue(content, "<tr>", "</tr>");

            MatchCollection tdMs = CommonFun.GetValues(infoStr, "<td>", "</td>");

            string orderNO = CommonFun.GetValue(infoStr, "<td class=\"tablenow\">", "</td>");

            bool result = false;

            MatchCollection ms = CommonFun.GetValues(content, "<div class=\"tkzds\">", "</div>");

            string format = ms[0].Value;
            string id     = ms[1].Value;
            string key    = id + format;

            //是否TK平台的单
            if (orderNO.StartsWith("TK") && !IsSelfOrder(content))
            {
                string drs = tdMs[5].Value;
                //不是同城
                if (!drs.Contains("长沙"))
                {
                    BaseItemInfo item = items.ContainsKey(key) ? items[key] : null;

                    //在线支付
                    if (infoStr.Contains("在线支付") || (infoStr.Contains("货到付款") && item != null && item.Type == "201"))
                    {
                        string msg    = CommonFun.GetValue(content, "<li>买家留言:<span>", "</span></li>");
                        string remark = CommonFun.GetValue(content, "<li>平台备注:<span>", "</span></li>");
                        //无需发票
                        if (!msg.Contains("发票") && !remark.Contains("发票"))
                        {
                            //MatchCollection ms = CommonFun.GetValues(content, "<div class=\"tkzds\">", "</div>");
                            //单品
                            if (ms.Count == 5)
                            {
                                //ms = CommonFun.GetValues(content, "span1 xiatiaomar\">", "</div>");
                                decimal price = Convert.ToDecimal(ms[2].Value);

                                //价格合理
                                if (items.ContainsKey(key))
                                {
                                    if (true || items[key].PlatformPrice <= price)
                                    {
                                        result = true;
                                    }
                                    else
                                    {
                                        Console.WriteLine("Price info orderPrice:{0}, sellPrice:{1}", price, items[key].PlatformPrice);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(result);
        }
コード例 #7
0
        /// <summary>
        /// Returns a string from a url using 'Get' between two strings, starts from <paramref name="strStart"/> to <paramref name="strEnd"/> from <paramref name="strSource"/>
        /// </summary>
        /// <param name="URL">The Url Returning source string of the context.</param>
        /// <param name="strStart">The head start of the param</param>
        /// <param name="strEnd">The tail end of the param</param>
        /// <returns>The string between <paramref name="strStart"/> and <paramref name="strEnd"/> from <paramref name="strSource"/></returns>
        public static string BetweenUrl(string URL, string strStart, string strEnd)
        {
            string strSource = "";

            try
            {
                using (Http.HttpRequest rq = new Http.HttpRequest())
                {
                    rq.UserAgent = HttpHelper.ChromeUserAgent();
                    strSource    = rq.Get(URL).ToString();
                }
                int Start, End;
                if (strSource.Contains(strStart) && strSource.Contains(strEnd))
                {
                    Start = strSource.IndexOf(strStart, 0) + strStart.Length;
                    End   = strSource.IndexOf(strEnd, Start);
                    return(strSource.Substring(Start, End - Start));
                }
                else
                {
                    return("");
                }
            }
            catch (HttpException ex)
            {
                return(ex.ToString());
            }
        }
コード例 #8
0
        /// <summary>
        /// 获取订单列表
        /// </summary>
        /// <returns></returns>
        public string GetOrderList(Http.HttpRequest http)
        {
            string url = "https://admin.tkyfw.com/Order/turn_out_pool";

            string content = http.HttpGet(url);

            return(content);
        }
コード例 #9
0
        /// <summary>
        /// 接单
        /// </summary>
        /// <returns></returns>
        public bool TakeOrder(string id, Http.HttpRequest http)
        {
            string url = "https://admin.tkyfw.com//Order/to_undertake";

            string postStr = string.Format("id={0}&Q=1", id);

            string result = http.HttpPost(url, postStr);

            return(true);
        }
コード例 #10
0
        /// <summary>
        /// 从下架列表中重新上架
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public bool ReUpItem(BaseItemInfo item, Http.HttpRequest http)
        {
            if (item.ShopPrice > 5)
            {
                string url = "https://admin.tkyfw.com/Goods/edit_upGoods";

                string postStr = string.Format("storeid[]={0}", item.ViewCount);

                string result = http.HttpPost(url, postStr);
            }

            return(true);
        }
コード例 #11
0
        /// <summary>
        /// 接单处理
        /// </summary>
        /// <param name="item"></param>
        /// <param name="http"></param>
        public void ProcessOrder(string item, Http.HttpRequest http)
        {
            if (CanTake(item, http))
            {
                string id = CommonFun.GetValue(item, "rel=\"", "\"");

                if (!orderList.ContainsKey(id) && TakeOrder(id, http))
                {
                    orderList.Add(id, id);
                    Console.WriteLine("Take Order !!!!!!!!!!!!!!!!!!");
                }
            }
        }
コード例 #12
0
        /// <summary>
        /// 获取在售列表
        /// </summary>
        /// <param name="http"></param>
        /// <returns></returns>
        public Dictionary <string, BaseItemInfo> GetSellingItem(Http.HttpRequest http)
        {
            Dictionary <string, BaseItemInfo> items = new Dictionary <string, BaseItemInfo>();

            string url = "https://admin.tkyfw.com/Goods/throughAudit?/Goods/throughAudit=&status=1&state=1";

            string content = http.HttpGet(url);

            string itemStr = CommonFun.GetValue(content, "<form name=\"form\" method=\"post\">", "</form>");

            List <BaseItemInfo> temp = GetOnePageItems(itemStr);

            string pageStr = CommonFun.GetValue(content, "下一页", "><span>末页</span>");

            pageStr = CommonFun.GetValue(pageStr, "&p=", "\"");
            pageStr = pageStr.Substring(pageStr.LastIndexOf("=") + 1);

            int totalPage = 0;

            if (!string.IsNullOrEmpty(pageStr))
            {
                totalPage = Convert.ToInt32(pageStr);
            }

            for (int i = 2; i <= totalPage; i++)
            {
                content = http.HttpGet("https://admin.tkyfw.com/Goods/throughAudit?/Goods/throughAudit=&status=1&state=1&p=" + i);

                itemStr = CommonFun.GetValue(content, "<form name=\"form\" method=\"post\">", "</form>");

                temp.AddRange(GetOnePageItems(itemStr));

                Console.WriteLine("{0}:GetSelling totalPage:{1}, curPage{2}.....", DateTime.Now, totalPage, i);
            }

            foreach (BaseItemInfo item in temp)
            {
                string key = item.ID + item.Format;

                if (!items.ContainsKey(key))
                {
                    items.Add(key, item);
                }
                else
                {
                    Console.WriteLine("Error, Same Itme key:{0}", key);
                }
            }

            return(items);
        }
コード例 #13
0
        /// <summary>
        /// 自动接单
        /// </summary>
        /// <returns></returns>
        public bool AutoGetOrder(Http.HttpRequest http)
        {
            //获取订单
            string content = GetOrderList(http);

            MatchCollection ms = CommonFun.GetValues(content, "<tbody>", "</tbody>");

            foreach (Match m in ms)
            {
                ProcessOrder(m.Value, http);
            }

            return(true);
        }
コード例 #14
0
        /// <summary>
        /// HTTP/1.1 요청이 들어오면 이곳에서 처리합니다.
        /// </summary>
        /// <param name="request">HTTP 요청 데이터</param>
        /// <returns>HTTP 리스폰스</returns>
        private Http.HttpResponse OnHttpRequest(Http.HttpRequest request)
        {
            Console.WriteLine("SimpleAdaptor::OnHttpRequest " + request.requestUri);

            var response = new Http.HttpResponse();

            response.code         = Http.ResponseCode.OK;
            response.reasonPhrase = "OK";
            response.SetContent("Hello World! " + request.requestUri);

            throw new CloseSessionException(response);

            //return response;
        }
コード例 #15
0
        public bool ReUpItemByCSV(string fileName)
        {
            try
            {
                Http.HttpRequest http = new Http.HttpRequest();

                BaseReadWebPage newItem      = new BaseReadWebPage();
                BaseReadWebPage downItemList = new BaseReadWebPage();

                newItem.ReadBaseItemInfo(fileName, true);
                downItemList.ReadBaseItemInfo("TKAdmin/down.csv", true);

                int count = 0;

                foreach (BaseItemInfo item in newItem.ShopAllItems.Values)
                {
                    foreach (BaseItemInfo downItem in downItemList.ShopAllItems.Values)
                    {
                        if (item.ID == downItem.ID)
                        {
                            if (count % 100 == 0)
                            {
                                http.CookieContainer = Login();
                            }

                            count++;

                            downItem.ShopPrice = downItem.PlatformPrice;

                            ReUpItem(downItem, http);

                            Thread.Sleep(random.Next(3, 6) * 1000);

                            break;
                        }
                    }
                }

                Console.WriteLine("UpItem count:{0}", count);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            return(true);
        }
コード例 #16
0
        /// <summary>
        /// 重新上架所有物品
        /// </summary>
        /// <returns></returns>
        public bool ReUpAllItem()
        {
            BaseReadWebPage newItem = new BaseReadWebPage();

            Http.HttpRequest http = new Http.HttpRequest();

            http.CookieContainer = Login();

            newItem.ReadBaseItemInfo("TKAdmin/need_reUp.csv", true);

            foreach (BaseItemInfo item in newItem.ShopAllItems.Values)
            {
                ReUpItem(item, http);
            }

            return(true);
        }
コード例 #17
0
        /// <summary>
        /// 更新库存
        /// </summary>
        /// <returns></returns>
        public bool UpdateInventory()
        {
            Http.HttpRequest http = new Http.HttpRequest();
            http.CookieContainer = Login();

            items = GetSellingItem(http);

            foreach (BaseItemInfo item in items.Values)
            {
                if (!string.IsNullOrEmpty(item.Inventory) && Convert.ToInt32(item.Inventory) >= 50)
                {
                    UpdatePrice(http, item.PlatformPrice, item.ViewCount, null, null);
                    Sleep();
                }
            }

            return(true);
        }
コード例 #18
0
        private Http.HttpResponse OnHttpRequest(Http.HttpRequest request)
        {
            Console.WriteLine("StaticFileAdaptor::OnHttpRequest " + request.requestUri);

            var response = new Http.HttpResponse();
            var path     = request.requestUri.Substring(1).Replace("/", "\\");

            if (path.Contains("..\\"))
            {
                response.code         = Http.ResponseCode.Forbidden;
                response.reasonPhrase = "Forbidden";
            }
            else if (File.Exists(path) == false)
            {
                response.code         = Http.ResponseCode.NotFound;
                response.reasonPhrase = "NotFound";
            }
            else
            {
                response.code         = Http.ResponseCode.OK;
                response.reasonPhrase = "OK";

                response.headers["Content-Type"] = "application/octet-stream";

                using (var fp = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    if (fp.Length > int.MaxValue)
                    {
                        throw new NotImplementedException("size over INT_MAX");
                    }

                    response.content = new byte[fp.Length];

                    fp.Read(response.content, 0,
                            Convert.ToInt32(fp.Length));
                }
            }

            return(response);
        }
コード例 #19
0
        /// <summary>
        /// 开始自动接单
        /// </summary>
        public void StartAutoGetOrder()
        {
            //登录
            Http.HttpRequest http = new Http.HttpRequest();

            http.CookieContainer = Login();

            items = GetSellingItem(http);

            double startStamp = GetNowTimestampS();

            double loginStamp = GetNowTimestampS();

            while (true)
            {
                Console.WriteLine("{0}:GetOrdering...........", DateTime.Now);

                AutoGetOrder(http);

                //每天更新一次在售列表
                if (GetNowTimestampS() - startStamp > 24 * 3600)
                {
                    items      = GetSellingItem(http);
                    startStamp = GetNowTimestampS();
                }

                //每半小时重新登录
                if (GetNowTimestampS() - startStamp > 1200)
                {
                    http.CookieContainer = Login();
                    loginStamp           = GetNowTimestampS();
                }

                Thread.Sleep(1000);
            }
        }
コード例 #20
0
        /// <summary>
        /// 自定义分页
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="rowCount">当前页记录条数</param>
        /// <returns></returns>
        public static IHtmlContent Pager(this IHtmlHelper htmlHelper, Http.HttpRequest request, int rowCount)
        {
            StringBuilder resultBuilder = new StringBuilder();//输出结果

            try
            {
                int    pageIndex = 1;
                string url       = request.Path;
                //获取当前页码
                if (request.RouteValues["p"] != null)
                {
                    pageIndex = Convert.ToInt32(request.RouteValues["p"].ToString());
                    url       = url.Substring(0, url.LastIndexOf("/"));
                }
                //处理分页样式
                resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}\">回到首页</a></li>");

                resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}{(pageIndex == 1 ? "" :$"/{pageIndex - 1}" )}\">上一页</a></li>");

                resultBuilder.Append($"<li class=\"page-item active\"><span class=\"page-link\">{pageIndex}</span></li>");
                //
                if (rowCount > 0)
                {
                    resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}{(pageIndex == 1 ? "" : $"/{pageIndex + 1}")}\">下一页</a></li>");
コード例 #21
0
        /// <summary>
        /// Returns a paged result from a queryable collection.
        /// </summary>
        /// <param name="source">Collection source.</param>
        /// <param name="pageInfo">Page information.</param>
        /// <param name="request">Http request.</param>
        /// <returns></returns>
        public static PagedResult <T> ToPagedResult <T>(this IQueryable source, PagingInfo pageInfo, Http.HttpRequest request = null) where T : class
        {
            var list = GetGenericSkip((dynamic)source, (pageInfo.Page - 1) * pageInfo.PageSize, pageInfo.PageSize);

            int totalResults = GetGenericCount((dynamic)source);
            int totalPages   = (int)Math.Ceiling((decimal)totalResults / (decimal)pageInfo.PageSize);

            string nextLink = ""; string previousLink = "";

            if (request != null)
            {
                if (pageInfo.Page < totalPages)
                {
                    nextLink  = request.SchemeAndHost();
                    nextLink += "?page=" + (pageInfo.Page + 1).ToString();
                    if (request.Query.ContainsKey("pagesize"))
                    {
                        nextLink += "&pagesize=" + request.Query["pagesize"];
                    }
                }
                if (pageInfo.Page > 1)
                {
                    previousLink  = request.SchemeAndHost();
                    previousLink += "?page=" + (pageInfo.Page - 1).ToString();
                    if (request.Query.ContainsKey("pagesize"))
                    {
                        previousLink += "&pagesize=" + request.Query["pagesize"];
                    }
                }
            }

            return(new PagedResult <T>()
            {
                Collection = list,
                Pagination = new PagingInfo
                {
                    TotalResults = totalResults,  // total number of records returned, i.e. 4300
                    TotalPages = totalPages,      // total number of pages (ceiling) = totalResults / MaxPageSize
                    PageSize = pageInfo.PageSize, // current page size, would be 3 x 1000 then 1 x 300
                    Page = pageInfo.Page,         // current page
                    //MaxPageSizeAllowed = pi.MaxPageSizeAllowed,
                    Next = nextLink,
                    Previous = previousLink
                }
            });
        }
コード例 #22
0
 public static PagedResult ToPagedResult(this IQueryable source, PagingInfo pageInfo, Http.HttpRequest request = null)
 {
     return(ToPagedResult <object>(source, pageInfo, request) as PagedResult);
 }
コード例 #23
0
        private Http.HttpResponse ExecCgi(Http.HttpRequest request)
        {
            Process p   = new Process();
            var     env = p.StartInfo.EnvironmentVariables;

            var tokens = request.requestUri.Split(new char[] { '?' }, 2);

            if (tokens.Length != 2)
            {
                env["QUERY_STRING"] = "";
            }
            else
            {
                env["QUERY_STRING"] = tokens[1];
            }

            env["REQUEST_URI"]  = request.requestUri;
            env["DOCUMENT_URI"] = "/";

            var scriptPath = request.path;

            if (scriptPath.EndsWith("/"))
            {
                scriptPath += "index.php";
            }
            scriptPath = scriptPath.Substring(1);

            env["SCRIPT_FILENAME"] = scriptPath;
            env["SCRIPT_NAME"]     = "IM JINWOO";

            env["GATEWAY_INTERFACE"] = "CGI/1.1";

            env["SERVER_SOFTWARE"] = "ASDF";
            env["REDIRECT_STATUS"] = "CGI";

            env["SERVER_ADDR"]      = "127.0.0.1";
            env["SERVER_NAME"]      = "JIWNOOSERVER";
            env["SERVER_PORT"]      = "80";
            env["SERVER_PROTOCOL"]  = "HTTP/1.1";
            env["SERVER_SIGNATURE"] = "";
            env["SERVER_SOFTWARE"]  = "HttpServ.cs";

            p.StartInfo.UseShellExecute        = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError  = true;
            p.StartInfo.FileName         = "C:\\Users\\hyun\\Downloads\\php-7.0.8-nts-Win32-VC14-x86\\php-cgi.exe";
            p.StartInfo.WorkingDirectory = "C:\\Users\\hyun\\Downloads\\php-7.0.8-nts-Win32-VC14-x86\\";

            p.Start();

            if (p.WaitForExit(1000) == false)
            {
                throw new InvalidOperationException("CGI::TimeOut");
            }

            Console.WriteLine("END PHP");

            var buffer = p.StandardOutput.ReadToEnd();
            var error  = p.StandardError.ReadToEnd();

            Console.WriteLine(error);

            Console.WriteLine("PHP DATA");
            Console.WriteLine(buffer);

            var builder = new Http.HttpRequestBuilder();

            builder.parser.ForceSkipRequestLine();
            builder.parser.ForceAllowContentWithoutLength();

            foreach (var w in builder.Write(Encoding.UTF8.GetBytes(buffer)))
            {
                ;
            }
            var cgiResult = builder.WriteEof();

            foreach (var header in cgiResult.headers)
            {
                Console.WriteLine($"{header.Key} : {header.Value}");
            }

            Console.WriteLine(Encoding.UTF8.GetString(cgiResult.content));

            var response = new Http.HttpResponse(Http.ResponseCode.OK);

            foreach (var header in cgiResult.headers)
            {
                response.headers[header.Key] = header.Value;
            }
            response.SetContent(cgiResult.content);

            return(response);
        }
コード例 #24
0
        private Http.HttpResponse OnHttpRequest(Http.HttpRequest request)
        {
            Console.WriteLine("SimpleAdaptor::OnHttpRequest " + request.requestUri);

            return(ExecCgi(request));
        }
コード例 #25
0
        /// <summary>
        /// 获取平台最低价
        /// </summary>
        /// <param name="id"></param>
        /// <param name="format"></param>
        /// <param name="http"></param>
        /// <returns></returns>
        public decimal GetPlatformPrice(string id, string format, Http.HttpRequest http, bool isSameOther = false)
        {
            try
            {
                decimal price = decimal.MaxValue;

                decimal otherPrice = decimal.MaxValue;

                int changeNum = 0;

                string url = string.Format("https://www.tkyfw.com/Ching_search.html?keyword={0}", id);

                string content = http.HttpGet(url);

                content = CommonFun.GetValue(content, "<ul class=\"seach_list\">", "</ul>");

                MatchCollection ms = CommonFun.GetValues(content, "<li>", "</li>");

                foreach (Match m in ms)
                {
                    string item_format = CommonFun.GetValue(m.Value, "规格:", "</p>");

                    if (item_format == format)
                    {
                        MatchCollection urlMs = CommonFun.GetValues(m.Value, "<a href=\"", "\"");

                        content = http.HttpGet("https://www.tkyfw.com" + urlMs[0].Value);

                        MatchCollection itemMs = CommonFun.GetValues(content, "<div class=\"merinfo\">", "</label>");

                        foreach (Match itemM in itemMs)
                        {
                            string priceStr = CommonFun.GetValue(itemM.Value, "¥", "</p>");
                            string shopInfo = CommonFun.GetValue(itemM.Value, "市<span>-</span>", "</a>");
                            try
                            {
                                if (!string.IsNullOrEmpty(priceStr))
                                {
                                    decimal temp = Convert.ToDecimal(priceStr);
                                    if (temp != price)
                                    {
                                        changeNum++;
                                    }
                                    if (isSameOther && shopInfo == other_store_name)
                                    {
                                        otherPrice = temp;
                                        break;
                                    }
                                    else if (shopInfo != store_name)
                                    {
                                        if (temp < price)
                                        {
                                            price = temp;
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex);
                            }
                        }

                        break;
                    }
                }

                if (otherPrice != decimal.MaxValue)
                {
                    return(otherPrice);
                }
                else
                {
                    //if (changeNum == 1)
                    //{
                    //    return price;
                    //}
                    return(price);
                    //if (price != decimal.MaxValue)
                    //{
                    //    return (price - (decimal)0.01);
                    //}
                    //else
                    //{
                    //    return price;
                    //}
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }

            return(decimal.MaxValue);

            //return otherPrice != decimal.MaxValue ? otherPrice : (price - (decimal)0.01);
        }
コード例 #26
0
        /// <summary>
        /// 自定义分页
        /// </summary>
        /// <param name="htmlHelper"></param>
        /// <param name="totalCount">总记录数</param>
        /// <returns></returns>
        public static IHtmlContent Pager(this IHtmlHelper htmlHelper, Http.HttpRequest request, int totalCount)
        {
            StringBuilder resultBuilder = new StringBuilder();//输出结果

            try
            {
                int    pageIndex = 1;
                string url       = request.Path;
                //获取当前页码
                if (request.RouteValues["p"] != null)
                {
                    pageIndex = Convert.ToInt32(request.RouteValues["p"].ToString());
                    url       = url.Substring(0, url.LastIndexOf("/"));
                }
                int pageSize  = 10;
                int pageCount = 0;
                //得到总页码数
                if (totalCount % pageSize == 0)
                {
                    pageCount = totalCount / pageSize;
                }
                else
                {
                    pageCount = totalCount / pageSize + 1;
                }

                //处理分页样式
                resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}\">回到首页</a></li>");

                resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}{(pageIndex == 1 ? "" :$"/{pageIndex - 1}" )}\">上一页</a></li>");
                //
                //中间页码计算
                int beginCount = 1;//开始页码
                if (pageIndex > 5)
                {
                    beginCount = pageIndex - 5;
                }
                int endCount = pageCount;
                if (pageCount - pageIndex > 5)
                {
                    endCount = pageIndex + 5;
                }

                for (int i = beginCount; i <= endCount; i++)
                {
                    if (pageIndex == i)
                    {
                        resultBuilder.Append($"<li class=\"page-item active\"><span class=\"page-link\">{i}</span></li>");
                    }
                    else
                    {
                        resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}/{i}\">{i}</a></li>");
                    }
                }
                //
                if (pageIndex < pageCount)
                {
                    resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}/{pageIndex + 1}\">下一页</a></li>");
                }
                else
                {
                    resultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link active\" href=\"{0}\">你已经找到了最后一处藏数据的地方...</a></li>", "#");
                }
            }
コード例 #27
0
        /// <summary>
        /// 自定义分页(Ayong:2016.10.20)
        /// </summary>
        /// <param name="HtmlHelper"></param>
        /// <param name="PageIndex">页码</param>
        /// <param name="PageSize">每页记录条数</param>
        /// <param name="TotalCount">总条数</param>
        /// <returns></returns>
        public static IHtmlContent Pager(this IHtmlHelper HtmlHelper, Http.HttpRequest Request, int PageSize, int TotalCount)
        {
            StringBuilder ResultBuilder = new StringBuilder();//输出结果

            try
            {
                int    PageIndex = 1;
                string url       = Request.Path;
                //拼接除页码参数以外的所有参数
                string param = string.Empty;
                foreach (string key in Request.Query.Keys)
                {
                    if (key != "p")
                    {
                        param += string.Format("&{0}={1}", key, Request.Query[key]);
                    }
                }
                param = param.TrimStart('&');
                url   = string.Format("{0}?{1}", url, param);
                //获取当前页码
                if (Request.Query["p"].Count > 0)
                {
                    PageIndex = int.Parse(Request.Query["p"]);
                }

                int PageCount = 0;
                //得到总页码数
                if (TotalCount % PageSize == 0)
                {
                    PageCount = TotalCount / PageSize;
                }
                else
                {
                    PageCount = TotalCount / PageSize + 1;
                }
                //处理分页样式
                //ResultBuilder.Append("<ul>");
                ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}\">首页</a></li>", url);

                ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">上一页</a></li>", url, PageIndex == 1 ? 1 : PageIndex - 1);

                //中间页码计算
                int BeginCount = 1;//开始页码
                if (PageIndex > 5)
                {
                    BeginCount = PageIndex - 5;
                }
                int EndCount = PageCount;
                if (PageCount - PageIndex > 5)
                {
                    EndCount = PageIndex + 5;
                }

                for (int i = BeginCount; i <= EndCount; i++)
                {
                    if (PageIndex == i)
                    {
                        ResultBuilder.Append(string.Format("<li class=\"page-item active\"><span class=\"page-link\">{0}</span></li>", i));
                    }
                    else
                    {
                        ResultBuilder.Append(string.Format("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">{2}</a></li>", url, i, i));
                    }
                }
                //
                ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">下一页</a></li>", url, PageIndex == PageCount ? PageCount : PageIndex + 1);
                ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">尾页</a></li>", url, PageCount);
                //ResultBuilder.Append("</ul>");
            }
            catch
            {
                ResultBuilder.Append("分页出现异常...");
            }
            return(new HtmlString(ResultBuilder.ToString()));
        }
コード例 #28
0
        public static async Task <Http.HttpContext> ToSuaveHttpContext(
            this HttpContext context,
            bool preserveHttpHeaderCasing)
        {
            var request = context.Request;

            // Get HTTP headers
            var headers =
                ListModule.OfSeq(
                    request.Headers
                    .Select(h => new Tuple <string, string>(
                                preserveHttpHeaderCasing ? h.Key : h.Key.ToLower(),
                                h.Value))
                    .ToList());

            // Get the absolute URL
            var host        = request.Host.Value;
            var absoluteUrl = $"{request.Scheme}://{host}{request.Path}{request.QueryString.Value}";

            // Get the raw query string (Suave doesn't include the ? in the beginning)
            var rawQuery = request.QueryString.Value.Substring(Math.Min(request.QueryString.Value.Length, 1));

            // Get files and multipart fields from a form request
            var files           = new List <Http.HttpUpload>();
            var multipartFields = new List <Tuple <string, string> >();

            if (request.HasFormContentType && request.Form != null && request.Form.Count > 0)
            {
                multipartFields.AddRange(
                    request.Form.Select(field => new Tuple <string, string>(field.Key, field.Value)));

                if (request.Form.Files != null && request.Form.Files.Count > 0)
                {
                    foreach (var file in request.Form.Files)
                    {
                        var tempFileName = Path.GetTempFileName();

                        using (var fileStream = File.Open(tempFileName, FileMode.OpenOrCreate))
                            await file.OpenReadStream().CopyToAsync(fileStream);

                        files.Add(
                            new Http.HttpUpload(
                                file.Name,
                                file.FileName,
                                file.ContentType,
                                tempFileName));
                    }
                }
            }

            // Get the raw body
            // (This will be an empty byte array if the stream has already been
            // read during the form upload)
            var rawForm = await request.Body.ReadAllBytesAsync();

            var suaveRequest = new Http.HttpRequest(
                request.Protocol,
                new Uri(absoluteUrl),
                request.Host.Host,
                HttpMethodFromString(request.Method),
                headers,
                rawForm,
                rawQuery,
                ListModule.OfSeq(files),
                ListModule.OfSeq(multipartFields),
                TraceHeader.parseTraceHeaders(headers));

            var suaveRuntime          = Http.HttpRuntimeModule.empty;
            var suaveSocketConnection = ConnectionModule.empty;

            return
                (Http.HttpContextModule.create(
                     suaveRequest,
                     suaveRuntime,
                     suaveSocketConnection,
                     false));
        }
コード例 #29
0
 internal HttpResponse(Http.HttpRequest request)
 {
     _request = request;
 }