基本完成登陆验证 同一JSESSIONID多次登录导致需要验证码??

This commit is contained in:
lichx
2024-03-14 00:02:17 +08:00
parent 566ad86d4a
commit c55a712eca
13 changed files with 275 additions and 68 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ namespace CSS_Solution.Request
{
try
{
HttpClient client = Initialize.hc_pool.getHttpClient(request_type);
HttpClient client = Initialize.hc_pool.GetHttpClient(request_type);
HttpRequestMessage request_Message = new HttpRequestMessage(HttpMethod.Get, url);
List<(string, string)> request_header = Settings.get_Index_Header.Get_header();
foreach (var (key, value) in request_header)
+12 -4
View File
@@ -10,15 +10,23 @@ namespace CSS_Solution.Request
public class HttpClientPool
{
HttpClient[] httpClients = new HttpClient[5];
HttpClientHandler[] httpClientHandlers = new HttpClientHandler[5];
public HttpClientPool()
{
for (int i = 0; i < httpClients.Length; i++)
if(i==(int)Request_Type.to_course)
httpClients[i] = new HttpClient(new HttpClientHandler() { AllowAutoRedirect = false });
if (i == (int)Request_Type.to_course)
{
httpClientHandlers[i] = new HttpClientHandler() { AllowAutoRedirect = false };
httpClients[i] = new HttpClient(httpClientHandlers[i]);
}
else
httpClients[i] = new HttpClient();
{
httpClientHandlers[i] = new HttpClientHandler();
httpClients[i] = new HttpClient(httpClientHandlers[i]);
}
}
public HttpClient getHttpClient(Request_Type request_Type) => httpClients[(int)request_Type];
public HttpClient GetHttpClient(Request_Type request_Type) => httpClients[(int)request_Type];
public HttpClientHandler GetHttpClientHandler(Request_Type request_Type) => httpClientHandlers[(int)request_Type];
}
+5 -9
View File
@@ -40,7 +40,7 @@ namespace CSS_Solution.Request
try
{
{
HttpClient client = Initialize.hc_pool.getHttpClient(Request_Type.get_code);
HttpClient client = Initialize.hc_pool.GetHttpClient(Request_Type.get_code);
HttpRequestMessage code_request_Message = new HttpRequestMessage(HttpMethod.Post, getCode_url);
code_request_Message.Headers.Add("Cookie", JSESSIONID);
foreach (var (key, value) in Settings.getCode_Header.Get_Request_header())
@@ -53,18 +53,17 @@ namespace CSS_Solution.Request
code = await code_message.Content.ReadAsStringAsync();
}
{
HttpClient client = Initialize.hc_pool.getHttpClient(request_type);
HttpClient client = Initialize.hc_pool.GetHttpClient(request_type);
HttpRequestMessage login_request_Message = new HttpRequestMessage(HttpMethod.Post, login_url);
login_request_Message.Headers.Add("Cookie", JSESSIONID);
foreach (var (key, value) in Settings.login_Header.Get_Request_header())
login_request_Message.Headers.Add(key, value);
List<KeyValuePair<string, string>> response_body = Settings.login_Body.Get_Request_body(last_result.RND, code);
login_request_Message.Content = new FormUrlEncodedContent(response_body);
List<KeyValuePair<string, string>> request_body = Settings.login_Body.Get_Request_body(last_result.RND, code);
login_request_Message.Content = new FormUrlEncodedContent(request_body);
login_request_Message.Content.Headers.ContentType = new MediaTypeHeaderValue(Settings.login_Header.Content_Type);
HttpResponseMessage message = await client.SendAsync(login_request_Message);
message.EnsureSuccessStatusCode();
string ans = await message.Content.ReadAsStringAsync();
foreach (var header in message.Headers)
{
if (header.Key != "Set-Cookie")
@@ -87,10 +86,7 @@ namespace CSS_Solution.Request
success(id);
});
}
public List<KeyValuePair<string, string>>? Get_cookie()
{
return respond_cookie;
}
public List<KeyValuePair<string, string>>? Get_cookie() => respond_cookie;
public Task Run()
{
task.Start();
+19 -3
View File
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
@@ -34,7 +35,14 @@ namespace CSS_Solution.Request
public Get_Index_Result(Get_Index get_Index)
{
id = get_Index.Get_Id();
JSESSIONID = get_Index.Get_cookie()?.Select(element => new { element.Key, element.Value }).Where(element => element.Key.Equals("JSESSIONID")).First().Value;
if (get_Index.Get_cookie() == null || get_Index.Get_cookie()?.Count() == 0)
{
foreach (Cookie cookie in Initialize.hc_pool.GetHttpClientHandler(Request_Type.get_index).CookieContainer.GetCookies(new Uri("http://sso.jwc.whut.edu.cn/Certification/login.do")))
if (cookie.Name == "JSESSIONID")
JSESSIONID = cookie.Value;
}
else
JSESSIONID = get_Index.Get_cookie()?.Select(element => new { element.Key, element.Value }).Where(element => element.Key.Equals("JSESSIONID")).First().Value;
RND = get_Index.Get_rnd();
dateTime = DateTime.Now;
error_info = "";
@@ -84,8 +92,16 @@ namespace CSS_Solution.Request
i--;
}
JSESSIONID = login.Get_JSESSIONID();
CERLOGIN = cookie?.Select(x => x).Where(element => element.Key.Equals("CERLOGIN")).First().Value;
cookie?.Add(new KeyValuePair<string, string>("JSESSIONID", JSESSIONID));
try
{
CERLOGIN = cookie?.Select(x => x).Where(element => element.Key.Equals("CERLOGIN")).First().Value;
cookie?.Add(new KeyValuePair<string, string>("JSESSIONID", JSESSIONID));
}
catch (InvalidOperationException)
{
if (login.Get_cookie() == null || login.Get_cookie()?.Count == 0)
error_info = "Login_failed, Consider account password error!";
}
dateTime = DateTime.Now;
error_info = "";
}
+16 -1
View File
@@ -12,6 +12,17 @@ namespace CSS_Solution.Request
public static Index_Task_handler index_Task_Handler = new Index_Task_handler();
public static Login_Task_handler login_Task_Handler = new Login_Task_handler();
public static ToCourse_Task_Handler toCourse_Task_Handler = new ToCourse_Task_Handler();
public bool Code_Test()
{
try
{
return true;
}
catch(Exception)
{
return false;
}
}
}
class Index_Task_handler
{
@@ -102,6 +113,7 @@ namespace CSS_Solution.Request
return;
}
tasks.Remove(id);
Initialize.default_logger.LogInformation($"[{DateTime.Now}] login success");
result_handler(result);
}
public void Login_failed(int id, Exception e, Login_Result? result = null)
@@ -113,8 +125,11 @@ namespace CSS_Solution.Request
}
if (result == null)
result = new Login_Result(e.Message);
else if (result.Error_info.Length == 0)
result.Error_info = "Login:" + e.Message;
else
result.Error_info = e.Message;
result.Error_info = "Login:" + e.Message + "error_info:" + result.Error_info;
Initialize.default_logger.LogWarning($"[{DateTime.Now}] {result.Error_info}");
tasks[id].Item2(result);
tasks.Remove(id);
}
+1 -1
View File
@@ -41,7 +41,7 @@ namespace CSS_Solution.Request
request_Message.Headers.Add(key, value);
return request_Message;
};
HttpClient client = Initialize.hc_pool.getHttpClient(request_type);
HttpClient client = Initialize.hc_pool.GetHttpClient(request_type);
HttpResponseMessage message;
do
{