diff --git a/客户端/齐越慧眼/齐越慧眼/ApiHelper.cs b/客户端/齐越慧眼/齐越慧眼/ApiHelper.cs
index eb455c6..d9c1bfd 100644
--- a/客户端/齐越慧眼/齐越慧眼/ApiHelper.cs
+++ b/客户端/齐越慧眼/齐越慧眼/ApiHelper.cs
@@ -21,7 +21,7 @@ namespace 齐越慧眼
public static string JwtToken {
get
{
-
+ return "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNDA1MTUxNjE5NTk0NTg4MTYwIiwidGVhbUlkIjoiMTQzOTg5OTEyMzk1NTI3MzcyOCIsImV4cCI6MTY3MDQ3MDkyNX0.iUkxjlPOsuLSuoUG9-O7VIkI33fDlu9AmPdqJBTBa-w";
if (string.IsNullOrEmpty(jwtToken))
{
jwtToken = GetMemoryToken().Replace("\r\n","");
diff --git a/客户端/齐越慧眼/齐越慧眼/App.xaml.cs b/客户端/齐越慧眼/齐越慧眼/App.xaml.cs
index f8b3c2b..92c7f0e 100644
--- a/客户端/齐越慧眼/齐越慧眼/App.xaml.cs
+++ b/客户端/齐越慧眼/齐越慧眼/App.xaml.cs
@@ -23,6 +23,12 @@ namespace 齐越慧眼
///
public static bool IsPriceTaskUser { get; set; }
+ ///
+ /// 京东Cookie
+ ///
+ public static string JdCookie { get; set; }
+
+
public App() {
diff --git a/客户端/齐越慧眼/齐越慧眼/Helpers/JdApiHelper.cs b/客户端/齐越慧眼/齐越慧眼/Helpers/JdApiHelper.cs
new file mode 100644
index 0000000..c5da174
--- /dev/null
+++ b/客户端/齐越慧眼/齐越慧眼/Helpers/JdApiHelper.cs
@@ -0,0 +1,106 @@
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Net;
+using System.Net.Http;
+using System.Net.Http.Headers;
+using System.Text;
+
+namespace 齐越慧眼.Helpers
+{
+ public class JdApiHelper
+ {
+ string boundary = "";
+
+ public string UploadFile(byte[] file, string cookie)
+ {
+
+ using (System.Net.WebClient webClient = new System.Net.WebClient())
+ {
+
+ webClient.Headers.Add("cookie", "__jdv=76161171|direct|-|none|-|1638869805933; __jdu=16388698059328286849; areaId=19; ipLoc-djd=19-1666-0-0; PCSYCityID=CN_440000_440600_0; _pst=16927647-35691944; unick=%E7%BC%BA%E9%98%B3%E5%85%89%E7%9A%84%E5%90%8A%E5%85%B0; pin=16927647-35691944; _tp=XgOfMtPFh92ZbKpmUXyiKkww9vdhsCgPikOUZsSQog8%3D; shshshfpa=6791a0cf-5a8f-7694-426b-368379ec439f-1638869824; shshshfpb=jb35ePu5DchO3Y4rjX%20xERA%3D%3D; qrsc=3; shshshfp=1f964b3df427da1779b7c5745b5cbddb; thor=015C6984E52D7AA6F54B79351F45CECCAA86F5B71F7807178D7E5044B5B8C528095D1EC065B7BB3B3478716F0193B94DCA09CD8C24E4EF5B8FEF4E26CA166E59681381AF92538D12DD17E89019060216036A0F30231A3CA47AD2B56A508B462F2651A1976D997C9A16073A0DA758F3DDF61B41359BED5A7FC84C16677B4FE6CA75A472DB8A772628BDBCB39A9B39ADA97072F2268D249D74E955B0F17A413D89; pinId=xpLDZpChZphYLUlvWdbaKvwZj9lbjz-c; __jda=76161171.16388698059328286849.1638869806.1638869806.1638879362.2; __jdb=76161171.4.16388698059328286849|2.1638879362; __jdc=76161171; shshshsID=d20602783dcaaffcb5355ea48291319c_2_1638879385194; 3AB9D23F7A4B3C9B=RMPGIHATPH4SBVV7LECL6XAHEWL242U2UZT6MW2CFKUCKQVVMS7HKIU7GT2O63I5A3SUEKPWBSHOLYCUQ3N7HMKZ5E");
+ webClient.Headers.Add("origin", "https://www.jd.com");
+ webClient.Headers.Add("referer", "https://www.jd.com");
+ webClient.Headers.Add("sec-fetch-dest", "iframe");
+ webClient.Headers.Add("sec-fetch-mode", "navigate");
+ webClient.Headers.Add("sec-fetch-site", "same-site");
+ webClient.Headers.Add("sec-fetch-user", "?1");
+ webClient.Headers.Add("upgrade-insecure-requests", "1");
+ webClient.Headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
+ webClient.Headers.Add("accept-encoding", " deflate, br");
+ webClient.Headers.Add("accept-language", "zh-CN,zh;q=0.9");
+ webClient.Headers.Add("cache-control", "no-cache");
+ // 边界符
+ var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
+
+ webClient.Headers.Add("content-type", $"multipart/form-data; boundary={boundary}");
+
+
+ var b = GetFileData("upload.jpg", new MemoryStream(file), boundary: boundary);
+ var result = webClient.UploadData("https://search.jd.com/image?op=upload", b.ToArray());
+ string json = Encoding.Default.GetString(result);
+
+ return json;
+ }
+ return string.Empty;
+ }
+
+
+
+ public static MemoryStream GetFileData(string fileName, MemoryStream file, string fileKeyName = "file", string boundary = "")
+ {
+
+
+ MemoryStream memStream = new MemoryStream();
+
+ // 边界符
+ var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
+ // 最后的结束符
+ var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");
+
+
+ //// 写入字符串的Key
+ //var stringKeyHeader = "--" + boundary +
+ // "\r\nContent-Disposition: form-data; name=\"{0}\"" +
+ // "\r\n\r\n{1}\r\n";
+
+
+ // 写入文件
+ const string filePartHeader =
+ "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
+ "Content-Type: image/jpeg\r\n\r\n";
+ var header = string.Format(filePartHeader, fileKeyName, fileName);
+ var headerbytes = Encoding.UTF8.GetBytes(header);
+
+ memStream.Write(beginBoundary, 0, beginBoundary.Length);
+ memStream.Write(headerbytes, 0, headerbytes.Length);
+
+ var buffer = new byte[1024];
+ int bytesRead; // =0
+ file.Seek(0, SeekOrigin.Begin);
+ while ((bytesRead = file.Read(buffer, 0, buffer.Length)) != 0)
+ {
+ memStream.Write(buffer, 0, bytesRead);
+ }
+
+ // 写入换行
+ var contentLine = Encoding.ASCII.GetBytes("\r\n");
+ memStream.Write(contentLine, 0, contentLine.Length);
+
+ // 写入最后的结束边界符
+ memStream.Write(endBoundary, 0, endBoundary.Length);
+
+
+
+ memStream.Position = 0;
+ return memStream;
+ //memStream.Close();
+
+
+ //requestStream.Close();
+
+ }
+ }
+}
diff --git a/客户端/齐越慧眼/齐越慧眼/MainWindow.xaml.cs b/客户端/齐越慧眼/齐越慧眼/MainWindow.xaml.cs
index 92d4358..ad8e494 100644
--- a/客户端/齐越慧眼/齐越慧眼/MainWindow.xaml.cs
+++ b/客户端/齐越慧眼/齐越慧眼/MainWindow.xaml.cs
@@ -13,6 +13,7 @@ using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using HandyControl.Controls;
+using 齐越慧眼.Helpers;
namespace 齐越慧眼
{
@@ -37,11 +38,18 @@ namespace 齐越慧眼
public static MainWindow Main;
public MainWindow()
{
+ Test();
+
InitializeComponent();
Main = this;
Loaded += MainWindow_Loaded;
}
+ private void Test()
+ {
+ new JdApiHelper().UploadFile(System.IO.File.ReadAllBytes(@"C:\Users\feng\Desktop\4cd3c6af18ba9ed9.jpg"),"");
+ }
+
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs
index 82fbc68..8493e61 100644
--- a/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs
+++ b/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs
@@ -2,6 +2,7 @@
using CefSharp.Wpf;
using System;
using System.Collections.Generic;
+using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
@@ -19,9 +20,22 @@ namespace 齐越慧眼.UserControls
{
public HandyControl.Controls.TabItem Tab { get; set; }
public ExtChromiumBrowser web;
+
+ ///
+ /// 是否登录京东
+ ///
+ public bool IsJustLoginJd { get; set; }
+
public BrowerControl(string url, HandyControl.Controls.TabItem tabItem)
{
InitializeComponent();
+
+
+ if (url.Contains("ltype=logout&ReturnUrl=https://home.jd.com"))
+ {
+ IsJustLoginJd = true;
+ }
+
Tab = tabItem;
web = new ExtChromiumBrowser(url)
{
@@ -38,29 +52,75 @@ namespace 齐越慧眼.UserControls
//RequestHandler =new MyRequestHandler()
};
- MyResourceRequestHandlerFactory myResourceRequestHandlerFactory = new MyResourceRequestHandlerFactory(this);
- myResourceRequestHandlerFactory.Handlers.TryAdd("test", null);
-
- web.ResourceRequestHandlerFactory = myResourceRequestHandlerFactory;
+ if (!IsJustLoginJd)
+ {
+ MyResourceRequestHandlerFactory myResourceRequestHandlerFactory = new MyResourceRequestHandlerFactory(this);
+ myResourceRequestHandlerFactory.Handlers.TryAdd("test", null);
+ web.ResourceRequestHandlerFactory = myResourceRequestHandlerFactory;
+ }
grid.Children.Add(web);
Loaded += BrowerControl_Loaded;
- web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
- var cjs = new CefAsyncJS();
- cjs.Brower = this;
- web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder);
- web.StartNewWindow += Web_StartNewWindow;
- web.TitleChanged += Web_TitleChanged;
+
+ if (!IsJustLoginJd)
+ {
+ web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
+ var cjs = new CefAsyncJS();
+ cjs.Brower = this;
+ web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder);
+ web.StartNewWindow += Web_StartNewWindow;
+ web.TitleChanged += Web_TitleChanged;
+ }
web.AddressChanged += Web_AddressChanged;
+ }
+ private void Visitor_SendCookie(Cookie obj)
+ {
+ string cookies = obj.Name + ":" + obj.Value + ";";
+ App.JdCookie += cookies;
}
private void Web_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
{
- Application.Current.Dispatcher.Invoke(()=> {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
txtUrl.Text = e.NewValue.ToString();
});
+
+
+ if (IsJustLoginJd)
+ {
+ if (e.NewValue.ToString().StartsWith("https://home.jd.com"))
+ {
+ CookieVisitor visitor = new CookieVisitor();
+ visitor.SendCookie += Visitor_SendCookie;
+ ICookieManager cookieManager = web.GetCookieManager();
+ cookieManager.VisitAllCookies(visitor);
+
+ WpfNoticeMsg.NoticeMessage.Show("请稍后,正在登录中...");
+
+ Task.Factory.StartNew(() =>
+ {
+ while (IsJustLoginJd)
+ {
+ Thread.Sleep(5000);
+
+ using (HttpClient http = new HttpClient())
+ {
+ http.DefaultRequestHeaders.Add("Cookie", App.JdCookie);
+ var result = http.GetAsync("https://passport.jd.com/user/petName/getUserInfoForMiniJd.action?callback=jQuery3218901&_=0").Result;
+ if (result.IsSuccessStatusCode)
+ {
+ WpfNoticeMsg.NoticeMessage.Show("登录成功,请返回重试!");
+ break;
+ }
+ }
+
+ }
+ });
+ }
+ }
}
public void Exit()
diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs
index 4ee78b9..aa18312 100644
--- a/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs
+++ b/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs
@@ -10,6 +10,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
+using 齐越慧眼.Helpers;
namespace 齐越慧眼.UserControls
{
@@ -86,5 +87,32 @@ namespace 齐越慧眼.UserControls
tab.Items.Add(item);
});
}
+
+ public void OpenSomePicItemForJd(byte[] imgFile)
+ {
+
+ string json = new JdApiHelper().UploadFile(imgFile, App.JdCookie);
+ string path = System.Text.RegularExpressions.Regex.Match(json, ".callback\\('(.*?)'\\);").Groups[1].Value;
+
+ string url = $"https://search.jd.com/image?path={System.Web.HttpUtility.UrlEncode(path)}&op=search";
+ //https://search.jd.com/image?path={}&op=search
+
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ MainWindow.Main.tab.SelectedIndex = 2;
+ var item = new HandyControl.Controls.TabItem() { IsSelected = true };
+ item.Closed += (e, s) =>
+ {
+ var obj = e as HandyControl.Controls.TabItem;
+ var brower = obj.Content as SomeBrowerControl;
+ brower.Exit();
+
+ };
+ SomeBrowerControl browerControl = new SomeBrowerControl(url, true, item);
+ item.Content = browerControl;
+ tab.Items.Add(item);
+ });
+ }
+
}
}
diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
index 71b900f..5900dc3 100644
--- a/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
+++ b/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
@@ -111,7 +111,28 @@ namespace 齐越慧眼.UserControls
{
byte[] arr = client.DownloadData(url.Replace("_.webp", ""));
arr = GetSmallImgArr(arr);
- BrowerTabPanelControl.Main.OpenSomePicItem(Convert.ToBase64String(arr));
+
+ if (url.Contains("jd.com")||url.Contains("360buyimg.com"))
+ {
+ if (string.IsNullOrEmpty(App.JdCookie))
+ {
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ BrowerTabPanelControl.Main.NewTab("https://passport.jd.com/uc/login?ltype=logout&ReturnUrl=https://home.jd.com/");
+ });
+ }
+ else {
+
+
+ BrowerTabPanelControl.Main.OpenSomePicItemForJd(arr);
+
+ }
+
+ }
+ else
+ {
+ BrowerTabPanelControl.Main.OpenSomePicItem(Convert.ToBase64String(arr));
+ }
return String.Empty;
}
catch (Exception ex)
diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs
index 4e9fd58..d1f5ea3 100644
--- a/客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs
+++ b/客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs
@@ -20,6 +20,7 @@ namespace 齐越慧眼.UserControls
{
public HandyControl.Controls.TabItem Tab { get; set; }
public string Base64Img { get; set; }
+ public byte[] ImgBytes { get; set; }
public ExtChromiumBrowser web;
public SomeBrowerControl(string base64, HandyControl.Controls.TabItem tabItem)
{
@@ -61,6 +62,49 @@ namespace 齐越慧眼.UserControls
this.KeyDown += BrowerControl_KeyDown;
}
+ public SomeBrowerControl(string url,bool isJd, HandyControl.Controls.TabItem tabItem)
+ {
+ InitializeComponent();
+ Tab = tabItem;
+
+ web = new ExtChromiumBrowser(url)
+ {
+ BrowserSettings =
+ {
+ DefaultEncoding = "UTF-8",
+ Plugins = CefState.Enabled,
+ //关于跨域限制
+ //WebSecurity = CefState.Disabled,
+ ApplicationCache = CefState.Enabled,
+ LocalStorage = CefState.Enabled
+
+ },
+
+ //RequestHandler =new MyRequestHandler()
+ };
+
+ MyResourceRequestHandlerFactory myResourceRequestHandlerFactory = new MyResourceRequestHandlerFactory(this);
+ myResourceRequestHandlerFactory.Handlers.TryAdd("test", null);
+
+ web.ResourceRequestHandlerFactory = myResourceRequestHandlerFactory;
+
+
+ grid.Children.Add(web);
+ Loaded += BrowerControl_Loaded;
+
+
+ //web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
+ //var cjs = new Cef2AsyncJS();
+ //cjs.Brower = this;
+ //web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder);
+ //web.StartNewWindow += Web_StartNewWindow;
+ //web.TitleChanged += Web_TitleChanged;
+ //web.AddressChanged += Web_AddressChanged;
+ //web.ExecuteScriptAsyncWhenPageLoaded("hyCoreModel.onLoad()");
+ //this.KeyDown += BrowerControl_KeyDown;
+ }
+
+
private void BrowerControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.F12)
@@ -119,6 +163,7 @@ namespace 齐越慧眼.UserControls
private void BrowerControl_Loaded(object sender, RoutedEventArgs e)
{
+ tip.Visibility = Visibility.Collapsed;
Thread t = new Thread(() => {
IWebBrowser webBrowser = null;
diff --git a/客户端/齐越慧眼/齐越慧眼/cefhelper/CefLifeSpanHandler.cs b/客户端/齐越慧眼/齐越慧眼/cefhelper/CefLifeSpanHandler.cs
index 48b407d..cc7e2c8 100644
--- a/客户端/齐越慧眼/齐越慧眼/cefhelper/CefLifeSpanHandler.cs
+++ b/客户端/齐越慧眼/齐越慧眼/cefhelper/CefLifeSpanHandler.cs
@@ -46,4 +46,28 @@ namespace 齐越慧眼.cefhelper
return true;
}
}
+
+ public class CookieVisitor : CefSharp.ICookieVisitor
+ {
+ public event Action SendCookie;
+ public void Dispose()
+ {
+
+ }
+
+ public bool Visit(Cookie cookie, int count, int total, ref bool deleteCookie)
+ {
+ deleteCookie = false;
+ if (SendCookie != null)
+ {
+ SendCookie(cookie);
+ }
+
+ return true;
+
+ }
+
+
+
+ }
}