Archived
基本完成登陆验证 同一JSESSIONID多次登录导致需要验证码??
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 = "";
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user