Pārlūkot izejas kodu

京东增加h5st签名

dodo hold 1 gadu atpakaļ
vecāks
revīzija
7aef14f1e8

+ 5 - 2
molilian.api/Controllers/admin/JdUnionController.cs

@@ -355,14 +355,17 @@ namespace molilian.api.Controllers
         {
             var clientIp = _accessor.HttpContext.GetUserIp();
             var token = provider.Get(_accessor.HttpContext);
-            string user_agent = _accessor.HttpContext.Request.UserAgent();
 
 
             string cookie = form.Read<string>("cookie", string.Empty);
+            string h5st = form.Read<string>("h5st", string.Empty);
+            string user_agent = form.Read<string>("user_agent", string.Empty);
             cookie = cookie.Replace("\r", "").Replace("\n", "").Trim();
             if (!cookie.EndsWith(";")) cookie += ";";
 
-            var accountId = JdPoolCore.UpdateCookies(cookie, user_agent);
+            h5st = h5st.Trim();
+            user_agent = user_agent.Trim();
+            var accountId = JdPoolCore.UpdateCookies(cookie, user_agent, h5st);
             bool success = accountId > 0;
             if (success)
             {

+ 2 - 2
molilian.api/Controllers/public/TestController.cs

@@ -40,7 +40,7 @@ namespace molilian.api.Controllers
         [HttpGet]
         public async Task<ActionResult> CreateNetworkInterface(string ecsid)
         {
-            AliyunCore core = new AliyunCore(6);
+            AliyunCore core = new AliyunCore(2);
             //创建弹性网卡并绑定公网IP
             var success = core.EcsCreateNetworkInterface("cn-beijing", ecsid);
 
@@ -51,7 +51,7 @@ namespace molilian.api.Controllers
         [HttpGet]
         public async Task<ActionResult> EcsAssignPrivateIpAddresses(string ecsid, int count)
         {
-            AliyunCore core = new AliyunCore(6);
+            AliyunCore core = new AliyunCore(2);
             //创建弹性网卡并绑定公网IP
             var success = core.EcsAssignPrivateIpAddresses("cn-beijing", ecsid, count);
             return new APIResult(new { success });

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
molilian.api/Properties/PublishProfiles/https___ccr.ccs.tencentyun.com_shaobin.pubxml.user


+ 15 - 18
molilian.core/Core/aliyun/AliyunCore.cs

@@ -65,27 +65,25 @@ namespace molilian.core
                 {
                     if ("Secondary".Equals(e.Type))
                     {
-#if DEBUG
-                        var response2 = plus.DescribeNetworkInterfaceAttribute(region, e.NetworkInterfaceId);
-                        var PrivateIpAddressList = response2.Body.PrivateIpSets.PrivateIpSet;
+                        //var response2 = plus.DescribeNetworkInterfaceAttribute(region, e.NetworkInterfaceId);
+                        //var PrivateIpAddressList = response2.Body.PrivateIpSets.PrivateIpSet;
 
-                        foreach (var privateIp in PrivateIpAddressList)
-                        {
-                            if (privateIp.Primary == true) continue;
-                            var privateIpAddress = privateIp.PrivateIpAddress;
+                        //foreach (var privateIp in PrivateIpAddressList)
+                        //{
+                        //    if (privateIp.Primary == true) continue;
+                        //    var privateIpAddress = privateIp.PrivateIpAddress;
 
-                            //申请公网ip
-                            var eip = plus.AllocateEipAddress(region);
-                            var allocationId = eip.Body.AllocationId;
-                            string eipAddress = eip.Body.EipAddress;
+                        //    //申请公网ip
+                        //    var eip = plus.AllocateEipAddress(region);
+                        //    var allocationId = eip.Body.AllocationId;
+                        //    string eipAddress = eip.Body.EipAddress;
 
-                            //绑定公网ip
-                            var AssociateEipAddress =
-                                plus.AssociateEipAddress(
-                                    region, allocationId, e.NetworkInterfaceId, EIPInstanceType.NetworkInterface, privateIpAddress);
-                        }
+                        //    //绑定公网ip
+                        //    var AssociateEipAddress =
+                        //        plus.AssociateEipAddress(
+                        //            region, allocationId, e.NetworkInterfaceId, EIPInstanceType.NetworkInterface, privateIpAddress);
+                        //}
 
-#else
                         //添加辅助私网
                         var response2 = plus.AssignPrivateIpAddresses(region, e.NetworkInterfaceId, count);
                         var PrivateIpAddressList = response2.Body.AssignedPrivateIpAddressesSet.PrivateIpSet.PrivateIpAddress;
@@ -102,7 +100,6 @@ namespace molilian.core
                                 plus.AssociateEipAddress(region, allocationId, e.NetworkInterfaceId, EIPInstanceType.NetworkInterface, privateIpAddress);
                         }
 
-#endif
                          
                         return true;
                     }

+ 18 - 14
molilian.core/Core/jd/JdPoolCore.cs

@@ -9,6 +9,7 @@ using dodohold.core;
 using Dataoke;
 using Google.Protobuf.WellKnownTypes;
 using System.Xml.Linq;
+using Mysqlx.Crud;
 
 
 namespace molilian.core
@@ -143,7 +144,7 @@ namespace molilian.core
 
 
 
-        public static int UpdateCookies(string cookies, string user_agent)
+        public static int UpdateCookies(string cookies, string user_agent, string h5st)
         {
             if (string.IsNullOrEmpty(cookies)) return 0;
             string pin = cookies.GetContentPart("pin=", ";");
@@ -159,31 +160,34 @@ namespace molilian.core
                 var work_mode = exist.work_mode;
                 accountId = exist.id;
                 if (work_mode == JdUnionWorkMode.Crawler) status = true;
-                new DBContext.Table("jd_pool")
-                   .Add("pin", pin)
-                   .Add("cookies", cookies)
-                   .Add("user_agent", user_agent)
-                   .Add("status", status)
-                   .Add("last_time", DateTime.Now)
-                   .Add("login_time", DateTime.Now)
-                   .Where("id=@id", new { exist.id })
-                   .Update();
+                var update = new DBContext.Table("jd_pool")
+                    .Add("pin", pin)
+                    .Add("cookies", cookies)
+                    .Add("status", status)
+                    .Add("last_time", DateTime.Now)
+                    .Add("login_time", DateTime.Now)
+                    .Where("id=@id", new { exist.id });
+                if (!string.IsNullOrEmpty(user_agent)) update.Add("user_agent", user_agent);
+                if (!string.IsNullOrEmpty(h5st)) update.Add("h5st", h5st);
+
+                update.Update();
                 if (status) _ = List(true);
             }
             else
             {
-                accountId = new DBContext.Table("jd_pool")
+                var update = new DBContext.Table("jd_pool")
                     .Add("pin", pin)
                     .Add("name", pin)
                     .Add("company", pin)
                     .Add("description", "由cookies上报创建此记录")
                     .Add("cookies", cookies)
-                    .Add("user_agent", user_agent)
                     .Add("create_time", DateTime.Now)
                     .Add("last_time", DateTime.Now)
                     .Add("login_time", DateTime.Now)
-                    .Add("status", 0)
-                    .Create();
+                    .Add("status", 0);
+                if (!string.IsNullOrEmpty(user_agent)) update.Add("user_agent", user_agent);
+                if (!string.IsNullOrEmpty(h5st)) update.Add("h5st", h5st);
+                accountId = update.Create();
             }
 
             NotifyCore.Notify(new NifyMessage

+ 1 - 0
molilian.core/DTO/jd/JdPoolDTO.cs

@@ -25,6 +25,7 @@
         public JdUnionWorkMode work_mode { get; set; } = JdUnionWorkMode.SiteApi;
         public string user_agent { get; set; } = string.Empty;
         public string cookies { get; set; } = string.Empty;
+        public string h5st { get; set; } = string.Empty;
 
         public string nodeName { get; set; } = string.Empty;
         public string end_point { get; set; } = string.Empty;

+ 49 - 0
molilian.core/Plus/JDUnion/H5stHack.cs

@@ -0,0 +1,49 @@
+using dodohold.core;
+using Sayaka.Common;
+
+
+namespace molilian.core
+{
+    public partial class JdUnionPlus
+    {
+
+        public async Task<string> H5stHack(dynamic querystring, CancellationToken cancellationToken)
+        {
+            string useragent = _account.user_agent;
+            if (string.IsNullOrEmpty(useragent)) useragent = ProviderFakeUserAgent.RandomComputer;
+
+            var args = new
+            {
+                version = "4.9.4",
+                body = querystring,
+                pin = _account.pin,
+                ua = _account.user_agent,
+                h5st = _account.h5st,
+            };
+
+
+            string data = args.Convert2Json();
+            string url = "http://host.docker.internal:3001/h5st";
+#if DEBUG
+            url = "http://bjapi.molilian.com:3001/h5st";
+#endif
+
+            WebClientUtility client = new WebClientUtility();
+            client.SetContentType("application/json");
+            client.Post(data);
+            var response = await client.RequestAsync(url, "POST", cancellationToken);
+
+            string body = response.Body();
+            var root = body.Convert2JsonElement();
+            int code = root.Read<int>("code");
+            string qs = root.PathRead<string>("body.qs");
+            if (code == 200)
+            {
+                return qs;
+            }
+            _ = new LoggerLibrary("JdUnion", "h5st").Info(body).SaveAsync();
+            return string.Empty;
+        }
+
+    }
+}

+ 1 - 0
molilian.core/Plus/JDUnion/JdUnionPlus.cs

@@ -286,6 +286,7 @@ namespace molilian.core
                 default:
                     if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(result.itemId) ||
                         (!url.StartsWith("https://item.jd.com/") &&
+                        !url.StartsWith("http://item.jd.com/") &&
                         !url.StartsWith("https://item.m.jd.com/product/") &&
                         !url.StartsWith("http://item.m.jd.com/product/") &&
                         !url.StartsWith("http://item.m.jd.com/product/")))

+ 162 - 0
molilian.core/Plus/JDUnion/goods.cs

@@ -151,6 +151,141 @@ namespace molilian.core
             }
 
 
+            var ts = DateTime.Now.Convert2UnixTimestamp(true);
+            string cookies = _account.cookies;
+            //cookies = "pinId=lDSKR4P756s; __jdu=797222838; unpl=JF8EAM1nNSttXxtVVxtSSEFASw9QWwpbTh4KP28NAwlaTAvEt16MoRnbUfHBdCarU9683KT3AsB67n92UtFSEXtdVV9fD0oeBm5vNWRdXU8ABh5VSUAXJV06KgF6SUxXbxN6CCU2S1UEGgYfExlOX11bEAl7FANfZjVSVV5IVwYSABIiEXtdXFptCEoWAmtjBF1YWkJRNSsHGxMRTltWX1oBexYzbWYEUV1fQ10AGjJZfMnF8oHV_d_CidTxw9Df9oz_3EgdCh0RE0hUVldtCXsU; shshshfpa=02d19590-d1e4-c91f-76d9-50b5b48caeae-1696955111; shshshfpx=02d19590-d1e4-c91f-76d9-50b5b48caeae-1696955111; TrackID=1P1YIoOSuMvq9KVQS8e4qaKAWslU3bHIlXwpUNeXUOPY_dPOhYcH5fl6XgaIzKppd5zTuGg52Ql9Ht7h1LNA62ZkhO1G3xwkTKekmP3nhjjmnOr5rzvlohhH3EkChqHLB; thor=D3FCA70DCE7542F87C212B790D3JDaxNfPy83okP3kLScwCkGiuMcyC4Pcyn8202E9E708F27CB58F480D2CC3FE67C9253747FE21007250E37AE528C577139FEEC81E6EE68034351A54BE200FF3JDaxNfPy83okP3kLScwCkGiuMcyC4Pcyn7n92UtFE03B1646F11A6B796AEE7DE71C760EDFF210BD03D24599A6CFF007C0D40BA49D; pin=23117; unick=jd2311kga; _tp=D8kjVbHzTJzgqxcxaN3m1w%3D%3D; _pst=23117; ipLoc-djd=24-2144-3909-58335; 3AB9D23F7A4B3C9B=IPF6PUOISQRNPNXNQVLJJVKQVBTAvEt16MoRnbUfHBdCarU9683JDaxNfPy83okP3kLScwCkGiuMcyC4PcynYGLMEE; flash=2_YNg0msef1iArLpGWQBwhJos62BkQWLuFuDD-HGOLK2KKuPtQ08qYx9js2jlEHwoRT7AVTOjRo8iR1-PT6ZsT8ZDnqdgMfbeoSNMJvJa8qphobenATQ0WXPYP62_XgiF1J7II6jY1qovmiIDadA7rd5tHyAVpTzEsqpI6xVJ9b6D*; __jda=209449046.797222838.1720272224.1720293360.1721239059.3; __jdc=209449046; __jdv=209449046|baidu|-|organic|notset|1721239059356; 3AB9D23F7A4B3CSS=jdd03IPF6PUOISQRNPNXNQVLJJVKQVBTAvEt16MoRnbUfHBdCarU9683JDaxNfPy83okP3kLScwCkGiuMcyC4PcynvEt16MoRnbUfHBdCarU9683KT3AsB67n92UtFUX; _gia_d=1; shshshfpb=BApXcdm_fwvVAJzuAI6Mnq8QQOcIPSh90B9TUVj599xJ1MlKCa4O2; __jdb=209449046.5.797222838|3.1721239059; RT=\"z=1&dm=jd.com&si=zpw2ttxi9&ss=lyq5alej&sl=6&tt=3x4&ld=z4s&nu=3d2f85352c70c73af100bf1449967844&cl=x78\"\r\n\r\n;";
+
+            string uuid = cookies.GetContentPart("__jdu=", ";");
+            string __jda = cookies.GetContentPart("__jda=", ";");
+            if (__jda.Split('.').Length > 1)
+            {
+                uuid = __jda.Split('.')[1];
+            }
+
+            string useragent = _account.user_agent;
+            if (string.IsNullOrEmpty(useragent)) useragent = ProviderFakeUserAgent.RandomComputer;
+
+            var args = new
+            {
+                funName = "getCode",
+                param = new
+                {
+                    couponLink = "",
+                    isPinGou = 0,
+                    materialId = result.itemId,
+                    materialType = 1,
+                    planId = 3479956501,
+                    promotionType = 15,
+                    receiveType = "cps",
+                    wareUrl = wareUrl,
+                    isSmartGraphics = 0,
+                    command = 1,
+                    ext1 = "618|pc|".UrlEncode()
+                },
+                lientPageId = "jingfen_pc"
+            };
+            string data = args.Convert2Json().UrlEncode();
+
+
+            string qs = await H5stHack(new
+            {
+                functionId = "unionPromoteLinkService",
+                appid = "unionpc",
+                _ = $"{ts}",
+                loginType = "3",
+                uuid = uuid,
+                body = data,
+            }, cancellationToken);
+
+            string url = $"https://api.m.jd.com/api?{qs}";
+            if (string.IsNullOrEmpty(qs))
+            {
+                result.success = false;
+                result.message = "转链失败";
+                result.reason = "签名失败";
+                result.shortLinkurl = wareUrl;
+                result.deeplink_url = GetDeeplink(result.shortLinkurl);
+                return result;
+            }
+
+            WebClientUtility client = new WebClientUtility();
+            client.Proxy = _proxy;
+#if DEBUG
+
+            client.Proxy = new WebProxy
+            {
+                Address = new Uri("http://bjapi.molilian.com:20063"),
+                //Credentials = new NetworkCredential("t12881967077999", "6a1eh304")
+            };
+
+            client.Proxy = new WebProxy
+            {
+                Address = new Uri("http://f848.kdltps.com:15818"),
+                Credentials = new NetworkCredential("t12881967077999", "6a1eh304")
+            };
+
+            client.Proxy = null;
+
+#endif
+            client.SetContentType("application/x-www-form-urlencoded");
+            client.AddHeaders("X-Referer-Page", "https://union.jd.com/proManager/index");
+            client.AddHeaders("X-Rp-Client", "h5_1.0.0");
+            client.AddHeaders("Referer", "https://union.jd.com/");
+            client.AddHeaders("Origin", "https://union.jd.com");
+            client.UserAgent = useragent;
+            client.AddHeaders("Cookie", cookies);
+            client.Post($"body={data}");
+            var response = await client.RequestAsync(url, "GET", cancellationToken);
+
+
+
+            //if (response.ResponseMessage.StatusCode == HttpStatusCode.Forbidden)
+            //{
+            //    result.success = false;
+            //    result.message = "转链失败";
+            //    result.reason = "nologin";
+            //    result.shortLinkurl = wareUrl;
+            //    result.deeplink_url = GetDeeplink(result.shortLinkurl);
+            //    return result;  
+            //}
+
+
+            string body = response.Body();
+            var root = body.Convert2JsonElement();
+            int code = root.Read<int>("code");
+            string message = root.Read<string>("message");
+            string shortCode = root.PathRead<string>("data.shortCode");
+
+            if (code == 200)
+            {
+                result.success = true;
+                result.message = "OK";
+                result.shortLinkurl = shortCode;
+                result.content = result.shortLinkurl;
+                result.deeplink_url = GetDeeplink(result.shortLinkurl);
+            }
+            else
+            {
+                if (string.IsNullOrEmpty(body)) message = "网络异常";
+                result.success = false;
+                result.message = "转链失败";
+                result.reason = message;
+                result.shortLinkurl = wareUrl;
+                result.deeplink_url = GetDeeplink(result.shortLinkurl);
+                _ = new LoggerLibrary("JdUnion", "GetPromotionByCrawlerAsync").Info(body).SaveAsync();
+            }
+            return result;
+        }
+
+        public async Task<JdDataDTO> GetPromotionByCrawlerAsync2(JdDataDTO result, string wareUrl, CancellationToken cancellationToken = default)
+        {
+            string[] parts = wareUrl.Split(new string[] { ".html" }, StringSplitOptions.None);
+            if (parts.Length > 1)
+            {
+                wareUrl = parts[0] + ".html";
+            }
+
+
             var ts = DateTime.Now.Convert2UnixTimestamp(true);
             string cookies = _account.cookies;
             //cookies = "pinId=lDSKR4P756s; __jdu=797222838; unpl=JF8EAM1nNSttXxtVVxtSSEFASw9QWwpbTh4KP28NAwlaTAvEt16MoRnbUfHBdCarU9683KT3AsB67n92UtFSEXtdVV9fD0oeBm5vNWRdXU8ABh5VSUAXJV06KgF6SUxXbxN6CCU2S1UEGgYfExlOX11bEAl7FANfZjVSVV5IVwYSABIiEXtdXFptCEoWAmtjBF1YWkJRNSsHGxMRTltWX1oBexYzbWYEUV1fQ10AGjJZfMnF8oHV_d_CidTxw9Df9oz_3EgdCh0RE0hUVldtCXsU; shshshfpa=02d19590-d1e4-c91f-76d9-50b5b48caeae-1696955111; shshshfpx=02d19590-d1e4-c91f-76d9-50b5b48caeae-1696955111; TrackID=1P1YIoOSuMvq9KVQS8e4qaKAWslU3bHIlXwpUNeXUOPY_dPOhYcH5fl6XgaIzKppd5zTuGg52Ql9Ht7h1LNA62ZkhO1G3xwkTKekmP3nhjjmnOr5rzvlohhH3EkChqHLB; thor=D3FCA70DCE7542F87C212B790D3JDaxNfPy83okP3kLScwCkGiuMcyC4Pcyn8202E9E708F27CB58F480D2CC3FE67C9253747FE21007250E37AE528C577139FEEC81E6EE68034351A54BE200FF3JDaxNfPy83okP3kLScwCkGiuMcyC4Pcyn7n92UtFE03B1646F11A6B796AEE7DE71C760EDFF210BD03D24599A6CFF007C0D40BA49D; pin=23117; unick=jd2311kga; _tp=D8kjVbHzTJzgqxcxaN3m1w%3D%3D; _pst=23117; ipLoc-djd=24-2144-3909-58335; 3AB9D23F7A4B3C9B=IPF6PUOISQRNPNXNQVLJJVKQVBTAvEt16MoRnbUfHBdCarU9683JDaxNfPy83okP3kLScwCkGiuMcyC4PcynYGLMEE; flash=2_YNg0msef1iArLpGWQBwhJos62BkQWLuFuDD-HGOLK2KKuPtQ08qYx9js2jlEHwoRT7AVTOjRo8iR1-PT6ZsT8ZDnqdgMfbeoSNMJvJa8qphobenATQ0WXPYP62_XgiF1J7II6jY1qovmiIDadA7rd5tHyAVpTzEsqpI6xVJ9b6D*; __jda=209449046.797222838.1720272224.1720293360.1721239059.3; __jdc=209449046; __jdv=209449046|baidu|-|organic|notset|1721239059356; 3AB9D23F7A4B3CSS=jdd03IPF6PUOISQRNPNXNQVLJJVKQVBTAvEt16MoRnbUfHBdCarU9683JDaxNfPy83okP3kLScwCkGiuMcyC4PcynvEt16MoRnbUfHBdCarU9683KT3AsB67n92UtFUX; _gia_d=1; shshshfpb=BApXcdm_fwvVAJzuAI6Mnq8QQOcIPSh90B9TUVj599xJ1MlKCa4O2; __jdb=209449046.5.797222838|3.1721239059; RT=\"z=1&dm=jd.com&si=zpw2ttxi9&ss=lyq5alej&sl=6&tt=3x4&ld=z4s&nu=3d2f85352c70c73af100bf1449967844&cl=x78\"\r\n\r\n;";
@@ -191,7 +326,21 @@ namespace molilian.core
             WebClientUtility client = new WebClientUtility();
             client.Proxy = _proxy;
 #if DEBUG
+
+            client.Proxy = new WebProxy
+            {
+                Address = new Uri("http://bjapi.molilian.com:20063"),
+                //Credentials = new NetworkCredential("t12881967077999", "6a1eh304")
+            };
+
+            client.Proxy = new WebProxy
+            {
+                Address = new Uri("http://f848.kdltps.com:15818"),
+                Credentials = new NetworkCredential("t12881967077999", "6a1eh304")
+            };
+
             client.Proxy = null;
+
 #endif
             client.SetContentType("application/x-www-form-urlencoded");
             client.AddHeaders("X-Referer-Page", "https://union.jd.com/proManager/index");
@@ -203,6 +352,19 @@ namespace molilian.core
             client.Post($"body={data}");
             var response = await client.RequestAsync(url, "POST", cancellationToken);
 
+
+
+            //if (response.ResponseMessage.StatusCode == HttpStatusCode.Forbidden)
+            //{
+            //    result.success = false;
+            //    result.message = "转链失败";
+            //    result.reason = "nologin";
+            //    result.shortLinkurl = wareUrl;
+            //    result.deeplink_url = GetDeeplink(result.shortLinkurl);
+            //    return result;  
+            //}
+
+
             string body = response.Body();
             var root = body.Convert2JsonElement();
             int code = root.Read<int>("code");

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels