C#开发笔记 #
网络请求 #
using System.Collections.Generic;
using System.Diagnostics;
using System.Text.Json.Nodes;
string cookie = "";
var handler = new HttpClientHandler();
using (var httpClient = new HttpClient(handler))
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), new Uri("https://cloud.yibailingshou.com/wsy_user/web/index.php?m=login&a=register_get_phone_code")))
{
var multipartContent = new MultipartFormDataContent();
multipartContent.Add(new StringContent("17628818007"), "phone");
multipartContent.Add(new StringContent("czo0OiI5NTY1Ijs"), "customer_id");
multipartContent.Add(new StringContent("+86"), "country_code");
multipartContent.Add(new StringContent(""), "captcha_token");//post data
request.Headers.TryAddWithoutValidation("X-Requested-With", "XMLHttpRequest");//添加header
request.Content = multipartContent;
using (var response = await httpClient.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);// 响应正文
Console.WriteLine(response);
if (response.Headers.TryGetValues("Set-Cookie", out IEnumerable<string> cookieValues))
{
string ck = cookieValues.FirstOrDefault();//响应header中的Set-cookie
Console.WriteLine(ck.Split(";")[0]);
}
dynamic result = JsonNode.Parse(body)!;//json解析
if (result["errcode"].GetValue<int>() == 407)// json对象取值
{
//return "407";
}
else if (result["errcode"].GetValue<int>() == 0)
{
//return "0";
}
else
{
//return "false";
}
}
}
}
AES加密 #
解密反之,易写
string Aesen(string text, string secret)
{
// Input plaintext
string plainText = "This is a secret message.";
// Generate key
byte[] key = Encoding.ASCII.GetBytes(secret);
// Encrypt
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.KeySize = 128;//相应的填充16=>128 32=>256
aes.BlockSize = 128;
aes.Key = key;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.ECB;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, null);
byte[] plainBytes = Encoding.UTF8.GetBytes(text);
byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
// Output ciphertext
string cipherText = Convert.ToBase64String(encryptedBytes);
Console.WriteLine("Ciphertext: " + cipherText);
return cipherText;
}
}
网络图片的保存 #
async Task SImg(string url, string filePath)
{
using (var client = new HttpClient())
{
using (var response = await client.GetAsync(url))
{
using (var stream = await response.Content.ReadAsStreamAsync())
{
using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
await stream.CopyToAsync(fileStream);
}
}
}
}
Console.WriteLine("Image downloaded.");
}
缺口坐标识别(待优化 #
因为有些图中包含多个缺口,所有准确率有待优化
int GetImgX(string bg_path, string tg_path)
{
Mat bg = Cv2.ImRead(bg_path);
Mat tg = Cv2.ImRead(tg_path);
Mat bg_gray = new Mat();
Mat tg_gray = new Mat();
Cv2.CvtColor(bg, bg_gray, ColorConversionCodes.BGR2GRAY);
Cv2.CvtColor(tg, tg_gray, ColorConversionCodes.BGR2GRAY);
int h = tg.Rows;
int w = tg.Cols;
Mat res = new Mat();
Cv2.MatchTemplate(bg_gray, tg_gray, res, TemplateMatchModes.CCoeffNormed);
double min_val, max_val;
Point min_loc, max_loc;
Cv2.MinMaxLoc(res, out min_val, out max_val, out min_loc, out max_loc);
Console.WriteLine(max_loc);
return (int)max_loc.X;
}