אויסרופן אַ גאַנצע 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 געהערן צום עקזיסטירנדיקן פּרופֿער. האַלט אַ פּאַסיקע גרענעץ פֿאַר דער ענטפֿער־גרייס און אַ צײַט־באַגרענעץ פֿאַר דעם ענדפּונקט. אַ פּראָדוקציע־פּרופֿער קען ווידערניצן קליענטן לויט דער רוטע; דער פֿראַגמענט ווײַזט וווּ דער אויסרוף גייט, נישט קיין פֿאַרבינדונג־סיסטעם פּלאַן.
אויב דורכגעפֿאַלענע פּראָקסיס זאָלן פֿאַרשריבן און איבערגעהיפּט ווערן, כאַפּט די דערוואַרטע נעצווערק־פֿעלער אַרום דער איינציקער פּרופֿונג. לאָז דעם אויסרוף פֿון דער פּרופֿונג אַנטלויפֿן צום אויסערדיקן באַהאַנדלער. פֿאַר פּאַראַלעלע פּרופֿונגען, טיילט דעם פּרוּוו־טאָקען מיט יעדן אַרבעטער און וואַרט אויף זייער פֿאַרענדיקונג פֿאַר איר שאַלט אַן אַן אַנדער פּרופֿונג.