private readonly string urlPattern = "(https.+)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]";

      async Task readURLAsync(string url, TextBox result)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CertificateValidationCallback);
         
            try
            {
                IsReading(true);
                Uri uri = new Uri(url);
                HttpWebRequest Request = await Task.Run(() => (HttpWebRequest)WebRequest.Create(uri));
                Request.Proxy = null;
                Request.Method = "GET";
                Request.UserAgent = cbUserAgent.Text;
                Request.Headers.Add("Accept-Encoding", "gzip, deflate, br");
                Request.Headers.Add("accept-language", "en-US,en;q=0.9");
                Request.Accept = "application/json, text/javascript, */*; q=0.01";

                using (WebResponse Response = await Task.Run(() => Request.GetResponse()))
                {
                    using (StreamReader Reader = await Task.Run(() => new StreamReader(Response.GetResponseStream())))
                    {
                        string content = await Reader.ReadToEndAsync();
                        MatchCollection mc = Regex.Matches(content, urlPattern, RegexOptions.IgnoreCase);
                        StringBuilder sb = new StringBuilder();
                        foreach (Match m in mc)
                        {
                            sb.Append(m.Value + "\r\n");
                        }

                        result.Text = sb.ToString().Trim();
                        CountLinks();

                        if (textBox_Result.Text.Trim() == "")
                            return;
                    }
                }
                if (Request != null)
                {
                    Request.Abort();
                }
            }

            catch (HttpRequestException ex2)
            {
                MessageBox.Show(ex2.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            IsReading(false);
        }
c#
 0 
zackmark15 1 Июл 2020 в 06:56

2 ответа
Лучший ответ
Я бы посоветовал перейти к чему-то более похожему на это:

Task<string> readURLAsync(string url, string userAgent)
{
    return Task.Run(async () =>
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Method", "GET");
            client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br");
            client.DefaultRequestHeaders.Add("accept-language", "en-US,en;q=0.9");
            client.DefaultRequestHeaders.Add("accept", "text/javascript, */*; q=0.01");
            client.DefaultRequestHeaders.UserAgent.ParseAdd(userAgent);
            using (HttpResponseMessage response = await client.GetAsync(url))
            {
                response.EnsureSuccessStatusCode();
                string readResponse = await response.Content.ReadAsStringAsync();
                MatchCollection mc = Regex.Matches(readResponse, urlPattern, RegexOptions.IgnoreCase);
                return String.Join(Environment.NewLine, mc.Cast<Match>().Select(x => x.Value));
            }
        }
    });