/// <summary> /// 刷新 淘宝h5 SDK 的cookie /// </summary> public void RefreshH5Api_Cookies() { try { // 生成时间戳 string timestamp = JavascriptContext.getUnixTimestamp(); //加载Cookie var ckVisitor = new LazyCookieVistor(); ///淘宝域下 的cookie string etao_appkey = "12574478"; var data = "{\"isSec\":0}";//固定数据 只为刷token var sign_getToken = JavascriptContext.getEtaoJSSDKSign("", timestamp, etao_appkey, data); string h5TokenUrl = string.Format("https://api.m.taobao.com/h5/mtop.user.getusersimple/1.0/?appKey={0}&t={1}&sign={2}&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data={3}", etao_appkey, timestamp, sign_getToken, data); this.AutoRefeshCookie(h5TokenUrl);//从新刷新页面 获取 服务器颁发的私钥 var cks_taobao = ckVisitor.LoadCookies(TaobaoSiteUrl); var _m_h5_tk_cookie = cks_taobao.FirstOrDefault(x => x.Name == "_m_h5_tk"); if (null == _m_h5_tk_cookie) { throw new Exception("未能成功刷新 淘宝h5 SDK! _m_h5_tk"); } } catch (Exception ex) { Logger.Error(ex); } }
/// <summary> /// 发送客户端搜集的平台的cookies 集合到远程 /// </summary> public static void SendCookiesToRemote() { string msg = "SendCookiesToRemote 被执行!时间:" + DateTime.Now.ToString(); Logger.Info(msg); lock (_locker) { SendMessageToListerner(msg); //todo:实现拉取cookies 然后发送到远程server var allPlatforms = Enum.GetValues(typeof(SupportPlatformEnum)); // SupportPlatformEnum.Alimama.get //var cookieLoader = new LazyCookieVistor(); foreach (SupportPlatformEnum platform in allPlatforms) { var siteObj = GlobalContext.SupportPlatforms.Find(x => x.Platform == platform); if (null == siteObj) { string platformDescription = platform.GetEnumDescription(); string errMsg = string.Format($"CrawlerCookiesPopJob,未能正确从配置文件加载平台地址:{platformDescription ?? platform.ToString()}"); SendMessageToListerner(errMsg); continue; } var domian = siteObj.SiteUrl; var cks = new LazyCookieVistor().LoadNativCookies(domian, true); if (null != cks && cks.IsNotEmpty()) { //淘宝的cookie 附加 if (platform == SupportPlatformEnum.Taobao) { //推送爱淘宝-券官网的cookie到淘宝 var cks_aiTaoBao = new LazyCookieVistor().LoadNativCookies(GlobalContext.AiTaobaoSiteURL, true); if (null != cks_aiTaoBao && cks_aiTaoBao.IsNotEmpty()) { for (int i = 0; i < cks_aiTaoBao.Count; i++) { var item = cks_aiTaoBao.ElementAt(i); if (cks.FirstOrDefault(x => x.Name == item.Name) != null) { continue;//跳过重名的cookie } cks.Add(item); } } } GlobalContext.PushToRedisCookies(domian, cks); } } //推送轻淘客cookies var cks_qingTaoke = new LazyCookieVistor().LoadNativCookies(GlobalContext.QingTaokeSiteURL, true); if (null != cks_qingTaoke && cks_qingTaoke.IsNotEmpty()) { GlobalContext.PushToRedisCookies(GlobalContext.QingTaokeSiteURL, cks_qingTaoke); } } }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(GuomeiSiteUrl); //优先使用格式化好的查询地址 string searchUrl = ""; if (null != queryParas.ResolvedUrl) { searchUrl = queryParas.ResolvedUrl.Url; } else { searchUrl = string.Format(templateOfSearchUrl, keyWord); } var client = GuomeiHttpClient; //设置Host client.Client.DefaultRequestHeaders.Host = new Uri(searchUrl).Host; //设置跳转头 Referrer string enCodeKeyword = HttpUtility.UrlEncode(keyWord); client.Client.DefaultRequestHeaders.Referrer = new Uri(string.Format(templateOfSearchUrl, keyWord)); ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, GuomeiSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 string content = clientProxy.GetRequestTransfer(searchUrl, null); return(content); }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(tmallSiteUrl); //天猫应该是有解析的搜索url的,如果没有,那么使用基于拼接的默认关键词的检索地址 string searchUrl = ""; if (null != queryParas.ResolvedUrl) { searchUrl = queryParas.ResolvedUrl.Url; } else { string sortValue = "s";//综合排序 if (null != queryParas.OrderFiled) { sortValue = queryParas.OrderFiled.FieldValue; } searchUrl = string.Format(templateOfSearchUrl, keyWord, sortValue); } var client = TmallHttpClient; ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, tmallSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 string content = clientProxy.GetRequestTransfer(searchUrl, null); return(content); }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(PddSiteUrl); //优先使用格式化好的查询地址 string searchUrl = ""; if (null != queryParas.ResolvedUrl) { searchUrl = queryParas.ResolvedUrl.Url; } else { searchUrl = string.Format(templateOfSearchUrl , keyWord, queryParas.PageIndex + 1 , queryParas.OrderFiled.FieldValue); } var client = PddHttpClient; //设置跳转头 Referrer client.Client.DefaultRequestHeaders.Referrer = new Uri(string.Format("http://mobile.yangkeduo.com/search_result.html?search_key={0}&search_src=new&search_met_track=manual&refer_page_name=search&refer_page_id=search_1515546776782_Zeq7a7qvHN&refer_page_sn=10031&page_id=search_result_1515546785426_9C9j8sIOep&sort_type=2", keyWord)); ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, PddSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 string content = clientProxy.GetRequestTransfer(searchUrl, null); return(content); }
/// <summary> /// 加载Cookies /// </summary> protected void LoadCookies() { if (null == this.DomainIdentity || this.DomainIdentity.Length <= 0) { return; } var ckVistor = new LazyCookieVistor(); _PageCooies = ckVistor.LoadCookies(this.DomainIdentity); }
/// <summary> /// 获取阿里妈妈的Cookie /// </summary> /// <returns></returns> public static DataContainer GetLoginTokenCookies() { var container = new DataContainer(); var ckVistor = new LazyCookieVistor(); var _PageCooies = ckVistor.LoadCookiesAsyc(GlobalContext.AlimamaSiteURL).Result; var json_cookies = JsonConvert.SerializeObject(_PageCooies); container.Result = json_cookies; return(container); }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(MogujieSiteUrl); string timeToken = JavascriptContext.getUnixTimestamp(); //优先使用格式化好的查询地址 string searchUrl = ""; if (null != queryParas.ResolvedUrl) { searchUrl = queryParas.ResolvedUrl.Url; } else { searchUrl = string.Format(templateOfSearchUrl, timeToken, keyWord); } var client = MogujieHttpClient; client.Client.DefaultRequestHeaders.Referrer = new Uri(string.Format("http://list.mogujie.com/s?q={0}&ptp=1.eW5XD.0.0.qJUTT", keyWord)); ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, MogujieSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 string content = clientProxy.GetRequestTransfer(searchUrl, null); return(content); }
/// <summary> /// 从其对应的render 进程中接收过来的消息过滤处理 /// </summary> /// <param name="browser"></param> /// <param name="sourceProcess"></param> /// <param name="message"></param> /// <returns></returns> protected override bool OnProcessMessageReceived(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage message) { Console.WriteLine("Render::OnProcessMessageReceived: SourceProcess={0}", sourceProcess); Console.WriteLine("Message Name={0} IsValid={1} IsReadOnly={2}", message.Name, message.IsValid, message.IsReadOnly); var arguments = message.Arguments; for (var i = 0; i < arguments.Count; i++) { var type = arguments.GetValueType(i); object value; switch (type) { case CefValueType.Null: value = null; break; case CefValueType.String: value = arguments.GetString(i); break; case CefValueType.Int: value = arguments.GetInt(i); break; case CefValueType.Double: value = arguments.GetDouble(i); break; case CefValueType.Bool: value = arguments.GetBool(i); break; default: value = null; break; } Console.WriteLine(" [{0}] ({1}) = {2}", i, type, value); } //filters if (message.Name.Equals(IPCCommand.CommandType.GET_COOKIE_FROM_BROWSER_PROCESS.ToString())) { var argumentsInMsg = message.Arguments; string domainName = argumentsInMsg.GetString(0); if (!string.IsNullOrEmpty(domainName)) { //获取指定域名的cookie var cks = new LazyCookieVistor().LoadNativCookies(domainName); if (cks.IsNotEmpty()) { var cookieString = cks.ToJson(); var message_cookies = CefProcessMessage.Create(IPCCommand.CommandType.GET_COOKIE_FROM_BROWSER_PROCESS.ToString()); message_cookies.Arguments.SetString(0, domainName); message_cookies.Arguments.SetString(1, cookieString); var success = browser.SendProcessMessage(CefProcessId.Renderer, message_cookies); Console.WriteLine("Sending myMessage3 to browser process = {0}", success); } } } return(true); //return base.OnProcessMessageReceived(browser, sourceProcess, message); }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(QingTaokeSiteUrl); string searchUrl = string.Format(templateOfSearchUrl, keyWord); var client = QingTaokeHttpClient; //设置跳转头 Referrer //client.Client.DefaultRequestHeaders.Referrer = new Uri(string.Format("http://mobile.yangkeduo.com/search_result.html?search_key={0}&search_src=new&refer_page_name=search&refer_page_id=search_1500439537429_yr7sonlWB0", keyWord)); ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, QingTaokeSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 string content = clientProxy.GetRequestTransfer(searchUrl, null); return(content); }
/// <summary> /// 静态登录Cookie注册 /// </summary> /// <param name="loginCookieCollection">需要提供的已经登录的Cookie集合</param> private static void SetLogin(List <CefCookie> loginCookieCollection) { try { var ckVisitor = new LazyCookieVistor(); if (null != loginCookieCollection) { //注册cookie集合到全局Cookie容器内 new LazyCookieVistor().SetCookieToCookieManager(GlobalContext.TaobaoSiteURL, loginCookieCollection); IsHasLoginTaobao = true; } } catch (Exception ex) { Logger.Error(ex); } }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //生成时间戳 string timestamp = JavascriptContext.getUnixTimestamp(); //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(eTaoSiteUrl); var _m_h5_tk_cookie = cks.FirstOrDefault(x => x.Name == "_m_h5_tk"); if (null == _m_h5_tk_cookie) { this.AutoRefeshCookie(this.RefreshCookieUrl);//从新刷新页面 获取 服务器颁发的私钥 cks = ckVisitor.LoadCookies(eTaoSiteUrl); _m_h5_tk_cookie = cks.FirstOrDefault(x => x.Name == "_m_h5_tk"); } if (null == _m_h5_tk_cookie || string.IsNullOrEmpty(_m_h5_tk_cookie.Value)) { throw new Exception("加载授权私钥失败!无法获取对应的cookie:_m_h5_tk "); } string _m_h5_tk_valueString = _m_h5_tk_cookie.Value.Split('_')[0]; string etao_appkey = "12574478"; if (null == queryParas.OrderFiled) { queryParas.OrderFiled = queryParas.GetCurrentPlatformSupportOrderFields().First(); } int pageNum = queryParas.PageIndex * 40; string paras = string.Concat("{\"s\":", pageNum, ",\"n\":40,\"q\":\"", keyWord, "\",\"needEncode\":false,\"sort\":\"", queryParas.OrderFiled.FieldValue, "\",\"maxPrice\":10000000,\"minPrice\":0,\"serviceList\":\"\",\"navigator\":\"all\",\"urlType\":2}"); //生成参数戳 string sign = JavascriptContext.getEtaoJSSDKSign(_m_h5_tk_valueString, timestamp, etao_appkey, paras); string url = string.Format("https://apie.m.etao.com/h5/mtop.etao.fe.search/1.0/?type=jsonp&api=mtop.etao.fe.search&v=1.0&appKey=12574478&data={0}&t={1}&sign={2}&callback=jsonp28861232595120323", paras, timestamp, sign); string searchUrl = string.Format(templateOfSearchUrl, keyWord); var client = etaoHttpClient; ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, eTaoSiteUrl); //修改client 的refer 头 client.Client.DefaultRequestHeaders.Referrer = new Uri(searchUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; string content = clientProxy.GetRequestTransfer(url, null); return(content); }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { VipSearchResultBag resultBag = new VipSearchResultBag(); string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } try { //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(VipSiteUrl); string searchUrl = string.Format(templateOfSearchUrl, keyWord); var client = VipHttpClient; client.Client.DefaultRequestHeaders.Referrer = new Uri(string.Format("https://m.vip.com/searchlist.html?q={0}&channel_id=", keyWord)); ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, VipSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 Task <HttpResponseMessage> brandTask; Task <HttpResponseMessage> categoryTreeTask; Task <HttpResponseMessage> searchListTask; string para_brandJson = ""; string para_categoryTreeJson = ""; string para_searchListJson = ""; if (null != queryParas.ResolvedUrl && null != queryParas.ResolvedUrl.ParasPost) { para_brandJson = queryParas.ResolvedUrl.ParasPost["para_brand"].ToString(); para_categoryTreeJson = queryParas.ResolvedUrl.ParasPost["para_categoryTree"].ToString(); para_searchListJson = queryParas.ResolvedUrl.ParasPost["para_searchList"].ToString(); } else { para_brandJson = new VipSearchParaBrand(keyWord).ToJson(); para_categoryTreeJson = new VipSearchParaCategoryTree(keyWord).ToJson(); //插件不解析的话,那么使用最简单的基本关键词过滤分页,不进行复杂过滤,复杂过滤筛选应该在插件实现 var paraDetais = new VipSearchParaSearchList(keyWord); //分页 paraDetais.paramsDetails.np = queryParas.PageIndex + 1; para_searchListJson = paraDetais.ToJson(); } if (queryParas.IsNeedResolveHeaderTags == true) { //1 查询品牌 var brandPara = new Dictionary <string, string>(); brandPara.Add("para_brand", para_brandJson); brandTask = clientProxy.PostRequestTransferAsync(queryBrandUrl, PostDataContentType.Json, brandPara, null); // 2 查询分类 var categoryTreePara = new Dictionary <string, string>(); categoryTreePara.Add("para_categoryTree", para_categoryTreeJson); categoryTreeTask = clientProxy.PostRequestTransferAsync(queryCategoryUrl, PostDataContentType.Json, categoryTreePara, null); } else { brandTask = Task.FromResult <HttpResponseMessage>(null); categoryTreeTask = Task.FromResult <HttpResponseMessage>(null); } //3检索内容 var searchListPara = new Dictionary <string, string>(); searchListPara.Add("para_searchList", para_searchListJson); searchListTask = clientProxy.PostRequestTransferAsync(templateOfSearchUrl, PostDataContentType.Json, searchListPara, null); //等待任务完毕 Task.WaitAll(new Task[] { brandTask, categoryTreeTask, searchListTask }); if (brandTask.Result != null) { resultBag.BrandStoreList = brandTask.Result.Content.ReadAsStringAsync().Result; } if (categoryTreeTask.Result != null) { resultBag.CategoryTree = categoryTreeTask.Result.Content.ReadAsStringAsync().Result; } if (searchListTask.Result != null) { resultBag.SearchList = searchListTask.Result.Content.ReadAsStringAsync().Result; } } catch (Exception ex) { throw ex; } return(resultBag.ToJson()); }
private void btn_Grapdata_Click(object sender, EventArgs e) { string domainUrl = this.txt_URL.Text.Trim().GetUrlStringDomainWithScheme(); this.DomainIdentity = domainUrl; var cks = new LazyCookieVistor().LoadCookies(domainUrl); //new LazyCookieVistor().LoadCookiesAsyc(this.DomainIdentity) //.ConfigureAwait(true) //.GetAwaiter().GetResult(); if (null == cks || cks.IsEmpty()) { MessageBox.Show("none init cookies......"); return; } if (string.IsNullOrEmpty(this.txt_URL.Text)) { MessageBox.Show("none URL......"); return; } var url = this.txt_URL.Text.Trim(); CookieContainer cookies = new CookieContainer(); foreach (var item in cks) { //var name = item.Name; //var value = item.Value; //Cookie ck = new Cookie(name, value); //ck.Domain = item.Domain; //ck.Path = item.Path; //ck.HttpOnly = item.HttpOnly; //ck.Secure = item.Secure; //if (null != item.Expires) //{ // ck.Expires = (DateTime)item.Expires; //} cookies.Add(item); } var httpHelper = new HttpRequestHelper(); var rep = httpHelper.CreateGetHttpResponse(url, null, 5000, cookies); //////-------------------------------开始发送第二步骤请求----------------------- //if (null != rep) { using (StreamReader sr = new StreamReader(rep.GetResponseStream(), Encoding.UTF8))//Encoding.GetEncoding("GB2312") { string content = sr.ReadToEnd(); this.richTextBox_Result.Text = content; } rep.Close(); } }
public override string LoadUrlGetSearchApiContent(IFetchWebPageArgument queryParas) { string keyWord = queryParas.KeyWord; if (string.IsNullOrEmpty(keyWord)) { return(string.Empty); } //加载Cookie var ckVisitor = new LazyCookieVistor(); var cks = ckVisitor.LoadCookies(SuningSiteUrl); //优先使用格式化好的查询地址 string searchUrl = ""; if (null != queryParas.ResolvedUrl) { searchUrl = queryParas.ResolvedUrl.Url; } else { searchUrl = string.Format(templateOfSearchUrl, keyWord); } var client = SuningHttpClient; //设置Host client.Client.DefaultRequestHeaders.Host = new Uri(searchUrl).Host; //设置跳转头 Referrer string enCodeKeyword = HttpUtility.UrlEncode(keyWord); client.Client.DefaultRequestHeaders.Referrer = new Uri(string.Format(templateOfSearchUrl, keyWord)); //如果是ajax 请求 那么附带这两个头信息 if (searchUrl.Contains("searchProductList.do")) { client.Client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); client.Client.DefaultRequestHeaders.Add("X-Tingyun-Id", "p35OnrDoP8k;r=57681924"); } ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks, SuningSiteUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; //注意:对于响应的内容 不要使用内置的文本 工具打开,这个工具有bug.看到的文本不全面 //使用json格式打开即可看到里面所有的字符串 string content = clientProxy.GetRequestTransfer(searchUrl, null); return(content); }
/// <summary> /// 加载淘宝 h5 webapi 优惠券查询地址-详细 /// 注意: 访问过于频繁并发的时候会被 ban 掉;以后设计为N个淘宝账户使用不同 的cookie进行抓取 /// </summary> /// <param name="sellerId"></param> /// <param name="activityId"></param> /// <returns></returns> public async Task <string> LoadH5Api_YouhuiquanDetailAsync(long sellerId, string activityId) { try { if (string.IsNullOrEmpty(activityId)) { return(null); } //生成时间戳 string timestamp = JavascriptContext.getUnixTimestamp(); //加载Cookie var ckVisitor = new LazyCookieVistor(); ///淘宝域下 的cookie var cks_taobao = ckVisitor.LoadCookies(TaobaoSiteUrl); string etao_appkey = "12574478"; //淘宝sdk 下的token //List<Cookie> cks_h5 = ckVisitor.LoadCookies(TaobaoH5WebApiUrl); var _m_h5_tk_cookie = cks_taobao.FirstOrDefault(x => x.Name == "_m_h5_tk"); string _m_h5_tk_valueString = string.Empty; if (null == _m_h5_tk_cookie) { this.RefreshH5Api_Cookies(); cks_taobao = ckVisitor.LoadCookies(TaobaoSiteUrl); _m_h5_tk_cookie = cks_taobao.FirstOrDefault(x => x.Name == "_m_h5_tk"); } if (null == _m_h5_tk_cookie || string.IsNullOrEmpty(_m_h5_tk_cookie.Value)) { throw new Exception("加载授权私钥失败!无法获取对应的cookie:_m_h5_tk "); } _m_h5_tk_valueString = _m_h5_tk_cookie.Value.Split('_')[0]; string paras = string.Concat("{\"uuid\":\"", activityId, "\",\"sellerId\":\"", sellerId, "\",\"queryShop\":true}"); string sign = JavascriptContext.getEtaoJSSDKSign(_m_h5_tk_valueString, timestamp, etao_appkey, paras); string apiUrl = string.Format("https://api.m.taobao.com/h5/mtop.taobao.couponmtopreadservice.findshopbonusactivitys/2.0/?appKey={0}&t={1}&sign={2}&api=mtop.taobao.couponMtopReadService.findShopBonusActivitys&v=2.0&AntiFlood=false&ecode=0&type=jsonp&dataType=jsonp&callback=mtopjsonp2&data={3}", etao_appkey, timestamp, sign, paras); var client = TaobaoH5ApiHttpClient; ////加载cookies ////获取当前站点的Cookie client.ChangeGlobleCookies(cks_taobao, TaobaoH5WebApiUrl); //修改client 的refer 头 client.Client.DefaultRequestHeaders.Referrer = new Uri(apiUrl); // 4 发送请求 var clientProxy = new HttpServerProxy() { Client = client.Client, KeepAlive = true }; var taskMsg = await clientProxy.GetResponseTransferAsync(apiUrl, null); string content = await taskMsg.Content.ReadAsStringAsync(); if (!string.IsNullOrEmpty(content) && content.Contains("FAIL_SYS_USER_VALIDATE")) { //需要身份验证的时候 ;FAIL_SYS_USER_VALIDATE::哎哟喂,被挤爆啦,请稍后重试; 被踢的时候 如何处理?? //清除taobao 的cookie 从客户端的rediscookie 从新加载 //ckVisitor.DeleteCookies(TaobaoSiteUrl); int x = 0; } return(content); } catch (Exception ex) { Logger.Error(ex); } return(string.Empty); }
/// <summary> /// 内部类方法加载指定的搜索url /// 比如:在初始化的时候 刷新Cookie用 或者刷新 Cookie 获取其他 /// </summary> /// <param name="searchUrl">请求指定的地址</param> /// <param name="timeOut">超时时间,不小于10秒,超时将返回加载超时</param> /// <returns></returns> protected Task <string> LoadUrlGetContentByCefBrowser(string searchUrl, int timeOut = 10000) { if (timeOut <= 10000) { timeOut = 10000; } try { //将事件消息模式转换为 task同步消息 var tcs = new TaskCompletionSource <string>(); bool isProcessRequestEnd = false; //注册请求处理委托 EventHandler <LoadEndEventArgs> handlerRequest = null; Action <string> disposeHandler = null; //资源释放委托 disposeHandler = (state) => { try { if (tcs.Task.IsCompleted != true) { //设置返回结果为固定的内容 tcs.SetResult(state); } } catch (Exception ex) { Logger.Error(ex); } finally { //线程锁打开自动进行下一个 waitHandler.Set(); } }; //2 开始发送请求LoadString handlerRequest = (s, e) => { isProcessRequestEnd = true;//标识正在接受请求 try { string url = HttpUtility.UrlDecode(searchUrl);//e.Frame.Url System.Diagnostics.Debug.WriteLine(string.Format("cef core loaded by :{0} ", url)); //刷新 cookie if (!string.IsNullOrEmpty(url) && !url.Equals("about:blank")) { var ckVisitor = new LazyCookieVistor(); ckVisitor.LoadCookiesAsyc(url, true); } } catch { } //mixdBrowser.CefLoader.LoadEnd -= handlerRequest; disposeHandler("loaded"); }; //etaoBrowser.ERequestHandler.OnRequestTheMoniterdUrl += handlerRequest; if (null == mixdBrowser || null == mixdBrowser.CefBrowser) { mixdBrowser = CookiedCefBrowser.CreateNewWebBrowser(searchUrl, handlerRequest) .ConfigureAwait(false) .GetAwaiter() .GetResult(); } else { //必须等待页面加载完毕,否则过期的Cookie无法刷新到最新 mixdBrowser.CefLoader.LoadEnd += handlerRequest; mixdBrowser.CefBrowser.GetMainFrame().LoadUrl(searchUrl); } //回调终结请求阻塞 TimerCallback resetHandler = (state) => { //对于超时的 直接杀死render 进程 if (isProcessRequestEnd == true) { return; } disposeHandler("timeout"); }; //超时监听 var timeBong = new System.Threading.Timer(resetHandler, null, timeOut, Timeout.Infinite); //进入当前线程锁定模式 waitHandler.WaitOne(); mixdBrowser.Dispose(); //线程后续执行后,表示任务完毕或者超时,释放定时器资源 timeBong.Dispose(); return(tcs.Task); } catch (Exception ex) { Logger.Error(ex); } return(Task.FromResult <string>(string.Empty)); }