Browse Source

增加接口

master
feng 4 years ago
parent
commit
01013d0be3
  1. 2
      客户端/齐越慧眼/齐越慧眼/ApiHelper.cs
  2. 6
      客户端/齐越慧眼/齐越慧眼/App.xaml.cs
  3. 106
      客户端/齐越慧眼/齐越慧眼/Helpers/JdApiHelper.cs
  4. 8
      客户端/齐越慧眼/齐越慧眼/MainWindow.xaml.cs
  5. 82
      客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs
  6. 28
      客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs
  7. 23
      客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs
  8. 45
      客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs
  9. 24
      客户端/齐越慧眼/齐越慧眼/cefhelper/CefLifeSpanHandler.cs

2
客户端/齐越慧眼/齐越慧眼/ApiHelper.cs

@ -21,7 +21,7 @@ namespace 齐越慧眼
public static string JwtToken { public static string JwtToken {
get get
{ {
return "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxNDA1MTUxNjE5NTk0NTg4MTYwIiwidGVhbUlkIjoiMTQzOTg5OTEyMzk1NTI3MzcyOCIsImV4cCI6MTY3MDQ3MDkyNX0.iUkxjlPOsuLSuoUG9-O7VIkI33fDlu9AmPdqJBTBa-w";
if (string.IsNullOrEmpty(jwtToken)) if (string.IsNullOrEmpty(jwtToken))
{ {
jwtToken = GetMemoryToken().Replace("\r\n",""); jwtToken = GetMemoryToken().Replace("\r\n","");

6
客户端/齐越慧眼/齐越慧眼/App.xaml.cs

@ -23,6 +23,12 @@ namespace 齐越慧眼
/// </summary> /// </summary>
public static bool IsPriceTaskUser { get; set; } public static bool IsPriceTaskUser { get; set; }
/// <summary>
/// 京东Cookie
/// </summary>
public static string JdCookie { get; set; }
public App() { public App() {

106
客户端/齐越慧眼/齐越慧眼/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();
}
}
}

8
客户端/齐越慧眼/齐越慧眼/MainWindow.xaml.cs

@ -13,6 +13,7 @@ using System.Windows.Media.Imaging;
using System.Windows.Navigation; using System.Windows.Navigation;
using System.Windows.Shapes; using System.Windows.Shapes;
using HandyControl.Controls; using HandyControl.Controls;
using .Helpers;
namespace namespace
{ {
@ -37,11 +38,18 @@ namespace 齐越慧眼
public static MainWindow Main; public static MainWindow Main;
public MainWindow() public MainWindow()
{ {
Test();
InitializeComponent(); InitializeComponent();
Main = this; Main = this;
Loaded += MainWindow_Loaded; 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) private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{ {

82
客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs

@ -2,6 +2,7 @@
using CefSharp.Wpf; using CefSharp.Wpf;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net.Http;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -19,9 +20,22 @@ namespace 齐越慧眼.UserControls
{ {
public HandyControl.Controls.TabItem Tab { get; set; } public HandyControl.Controls.TabItem Tab { get; set; }
public ExtChromiumBrowser web; public ExtChromiumBrowser web;
/// <summary>
/// 是否登录京东
/// </summary>
public bool IsJustLoginJd { get; set; }
public BrowerControl(string url, HandyControl.Controls.TabItem tabItem) public BrowerControl(string url, HandyControl.Controls.TabItem tabItem)
{ {
InitializeComponent(); InitializeComponent();
if (url.Contains("ltype=logout&ReturnUrl=https://home.jd.com"))
{
IsJustLoginJd = true;
}
Tab = tabItem; Tab = tabItem;
web = new ExtChromiumBrowser(url) web = new ExtChromiumBrowser(url)
{ {
@ -38,29 +52,75 @@ namespace 齐越慧眼.UserControls
//RequestHandler =new MyRequestHandler() //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); grid.Children.Add(web);
Loaded += BrowerControl_Loaded; Loaded += BrowerControl_Loaded;
web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
var cjs = new CefAsyncJS(); if (!IsJustLoginJd)
cjs.Brower = this; {
web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder); web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true;
web.StartNewWindow += Web_StartNewWindow; var cjs = new CefAsyncJS();
web.TitleChanged += Web_TitleChanged; cjs.Brower = this;
web.JavascriptObjectRepository.Register("hyCoreModel", cjs, BindingOptions.DefaultBinder);
web.StartNewWindow += Web_StartNewWindow;
web.TitleChanged += Web_TitleChanged;
}
web.AddressChanged += Web_AddressChanged; 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) private void Web_AddressChanged(object sender, DependencyPropertyChangedEventArgs e)
{ {
Application.Current.Dispatcher.Invoke(()=> { Application.Current.Dispatcher.Invoke(() =>
{
txtUrl.Text = e.NewValue.ToString(); 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() public void Exit()

28
客户端/齐越慧眼/齐越慧眼/UserControls/BrowerTabPanelControl.xaml.cs

@ -10,6 +10,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using System.Windows.Navigation; using System.Windows.Navigation;
using System.Windows.Shapes; using System.Windows.Shapes;
using .Helpers;
namespace .UserControls namespace .UserControls
{ {
@ -86,5 +87,32 @@ namespace 齐越慧眼.UserControls
tab.Items.Add(item); 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);
});
}
} }
} }

23
客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs

@ -111,7 +111,28 @@ namespace 齐越慧眼.UserControls
{ {
byte[] arr = client.DownloadData(url.Replace("_.webp", "")); byte[] arr = client.DownloadData(url.Replace("_.webp", ""));
arr = GetSmallImgArr(arr); 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; return String.Empty;
} }
catch (Exception ex) catch (Exception ex)

45
客户端/齐越慧眼/齐越慧眼/UserControls/SomeBrowerControl.xaml.cs

@ -20,6 +20,7 @@ namespace 齐越慧眼.UserControls
{ {
public HandyControl.Controls.TabItem Tab { get; set; } public HandyControl.Controls.TabItem Tab { get; set; }
public string Base64Img { get; set; } public string Base64Img { get; set; }
public byte[] ImgBytes { get; set; }
public ExtChromiumBrowser web; public ExtChromiumBrowser web;
public SomeBrowerControl(string base64, HandyControl.Controls.TabItem tabItem) public SomeBrowerControl(string base64, HandyControl.Controls.TabItem tabItem)
{ {
@ -61,6 +62,49 @@ namespace 齐越慧眼.UserControls
this.KeyDown += BrowerControl_KeyDown; 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) private void BrowerControl_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{ {
if (e.Key == Key.F12) if (e.Key == Key.F12)
@ -119,6 +163,7 @@ namespace 齐越慧眼.UserControls
private void BrowerControl_Loaded(object sender, RoutedEventArgs e) private void BrowerControl_Loaded(object sender, RoutedEventArgs e)
{ {
tip.Visibility = Visibility.Collapsed;
Thread t = new Thread(() => { Thread t = new Thread(() => {
IWebBrowser webBrowser = null; IWebBrowser webBrowser = null;

24
客户端/齐越慧眼/齐越慧眼/cefhelper/CefLifeSpanHandler.cs

@ -46,4 +46,28 @@ namespace 齐越慧眼.cefhelper
return true; return true;
} }
} }
public class CookieVisitor : CefSharp.ICookieVisitor
{
public event Action<CefSharp.Cookie> 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;
}
}
} }

Loading…
Cancel
Save