ସମ୍ପୂର୍ଣ୍ଣ WinForms ପ୍ରକ୍ସି-ଯାଞ୍ଚ ରନ୍ ବାତିଲ୍ କରନ୍ତୁ
WinForms ପ୍ରକ୍ସି-ଯାଞ୍ଚ ରନ୍ ପାଇଁ ଏକ ବାତିଲ୍ ଉତ୍ସ ରଖନ୍ତୁ, HTTP କାର୍ଯ୍ୟରେ ବାତିଲ୍ ବ୍ୟାପନ କରନ୍ତୁ ଏବଂ ତାଲିକା ଆଗକୁ ବଢ଼ିବା ବନ୍ଦ କରନ୍ତୁ।
ବାତିଲ୍ ବଟନ୍ ରନ୍ କୁ ବନ୍ଦ କରିବା ଉଚିତ୍। ଯଦି ପ୍ରତ୍ୟେକ ପ୍ରକ୍ସି ଯାଞ୍ଚ ବାତିଲ୍ ଧରି ସାଧାରଣ ଭାବରେ ଫେରିଆସେ, ବାହ୍ୟ ଲୁପ୍ କେବଳ ପରବର୍ତ୍ତୀ ପ୍ରକ୍ସିକୁ ଯାଏ। ତେବେ ସ୍କ୍ରିନ୍ ଦେଖାଯାଏ ଯେପରି ବାତିଲ୍ କିଛି କରିନାହିଁ।
ଆଧୁନିକ .NET WinForms ରେ ଏକ ଉତ୍ସକୁ ଫର୍ମ ଫିଲ୍ଡ ଭାବରେ ରଖନ୍ତୁ ଏବଂ ବାତିଲ୍ କୁ ଇଭେଣ୍ଟ ହ୍ୟାଣ୍ଡଲର୍ ପର୍ଯ୍ୟନ୍ତ ପହଞ୍ଚିବାକୁ ଦିଅନ୍ତୁ:
private CancellationTokenSource? activeRun;
private async void startButton_Click(object sender, EventArgs e)
{
if (activeRun is not null) return;
using var run = new CancellationTokenSource();
activeRun = run;
startButton.Enabled = false;
try
{
foreach (Uri proxy in configuredProxies)
{
run.Token.ThrowIfCancellationRequested();
await CheckProxyAsync(proxy, run.Token);
}
statusLabel.Text = "Finished";
}
catch (OperationCanceledException) when (run.IsCancellationRequested)
{
statusLabel.Text = "Stopped";
}
finally
{
activeRun = null;
startButton.Enabled = true;
}
}
private void cancelButton_Click(object sender, EventArgs e)
=> activeRun?.Cancel();configuredProxies ହେଉଛି ଆପ୍ ପୂର୍ବରୁ ପାର୍ସ କରିଥିବା ପ୍ରକ୍ସି URI ତାଲିକା। ମାଗଣା ପ୍ରକ୍ସି ତାଲିକାର ଧାଡ଼ିଗୁଡ଼ିକ ଅନୁମତିପ୍ରାପ୍ତ ସାର୍ବଜନୀନ ଲକ୍ଷ୍ୟ ଯାଞ୍ଚକୁ ଖାଦ୍ୟ ଦେଇପାରେ; ପ୍ରୋଟୋକଲ୍ ରଖନ୍ତୁ ଏବଂ କେବଳ ଏହି ହ୍ୟାଣ୍ଡଲର୍ ସମର୍ଥିତ ପ୍ରକାର ବ୍ୟବହାର କରନ୍ତୁ। UI ପ୍ରତ୍ୟେକ କାର୍ଯ୍ୟକୁ ଅପେକ୍ଷା କରେ, ତେଣୁ ସନ୍ଦେଶ ଲୁପ୍ ବାତିଲ୍ କ୍ଲିକ୍ ଗ୍ରହଣ କରିବାକୁ ମୁକ୍ତ ରହେ।
ଟୋକନ୍ କୁ ନେଟୱାର୍କକୁ ନେଇଯାଅ
ବ୍ୟକ୍ତିଗତ ଯାଞ୍ଚ ସେହି ଟୋକନ୍ ଗ୍ରହଣ କରିବା ଆବଶ୍ୟକ। ସଂକ୍ଷିପ୍ତ HTTP ଯାଞ୍ଚ ଏହିପରି ଦେଖାଯାଇପାରେ:
private async Task CheckProxyAsync(Uri proxy, CancellationToken token)
{
using var handler = new HttpClientHandler
{
Proxy = new System.Net.WebProxy(proxy),
UseProxy = true
};
using var client = new HttpClient(handler);
using var response = await client.GetAsync(
probeUri, HttpCompletionOption.ResponseHeadersRead, token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(token);
RecordResult(proxy, body);
}probeUri ଏବଂ RecordResult ବିଦ୍ୟମାନ ଯାଞ୍ଚକର୍ତ୍ତାର। ଏହି ଏଣ୍ଡପଏଣ୍ଟ ପାଇଁ ଉପଯୁକ୍ତ ପ୍ରତିକ୍ରିୟା-ଆକାର ସୀମା ଏବଂ ସମୟ ସୀମା ରଖନ୍ତୁ। ଉତ୍ପାଦନ ଯାଞ୍ଚକର୍ତ୍ତା ମାର୍ଗ ଅନୁସାରେ କ୍ଲାଏଣ୍ଟ ପୁନଃବ୍ୟବହାର କରିପାରେ; ଅଂଶଟି ଦେଖାଏ ବାତିଲ୍ କେଉଁଠି ଯାଏ, ସଂଯୋଗ-ପୁଲ୍ ଡିଜାଇନ୍ ନୁହେଁ।
ଯଦି ବିଫଳ ପ୍ରକ୍ସିଗୁଡ଼ିକୁ ରେକର୍ଡ କରି ଛାଡ଼ିବାକୁ ହୁଏ, ବ୍ୟକ୍ତିଗତ ଯାଞ୍ଚ ଚାରିପାଖରେ ଆଶା କରାଯାଉଥିବା ନେଟୱାର୍କ ବିଫଳତା ଧରନ୍ତୁ। ରନ୍ ବାତିଲ୍ କୁ ବାହ୍ୟ ହ୍ୟାଣ୍ଡଲର୍ ପର୍ଯ୍ୟନ୍ତ ଖସିଯିବାକୁ ଦିଅନ୍ତୁ। ସମାନ୍ତରାଳ ଯାଞ୍ଚ ପାଇଁ, ରନ୍ ଟୋକନ୍ ପ୍ରତ୍ୟେକ କର୍ମୀ ସହିତ ଅଂଶୀଦାର କରନ୍ତୁ ଏବଂ ଅନ୍ୟ ରନ୍ ସକ୍ଷମ କରିବା ପୂର୍ବରୁ ସେମାନଙ୍କ ସମାପ୍ତି ଅପେକ୍ଷା କରନ୍ତୁ।