0

My application is downloading many web pages and files and I don't want it to ever spend more than 4 seconds trying to download a webpage or file. I can't get the correct timeout settings to allow this.

What setting an I missing here?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(websiteURL);
request.Timeout = 4000;
request.KeepAlive = false;
request.AllowAutoRedirect = true;
request.ProtocolVersion = HttpVersion.Version11;
request.Accept = "text/html, application/xhtml+xml, application/xml; q=0.9, image/webp, */*; q=0.8";
request.Headers["Accept-Language"] = "en-GB,en-US;q=0.7,en;q=0.3";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36";
request.ReadWriteTimeout = 4000;
request.AllowWriteStreamBuffering = false;

response = (HttpWebResponse)request.GetResponse();

Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
reader.BaseStream.ReadTimeout = 4000;

dataStream.WriteTimeout = 4000;
dataStream.ReadTimeout = 4000;

responseFromServer = reader.ReadToEnd();
Mr J
  • 2,655
  • 4
  • 37
  • 58
  • Do you use hostname inside the `websiteUrl`? *A Domain Name System (DNS) query may take up to 15 seconds to return or time out. If your request contains a host name that requires resolution and you set Timeout to a value less than 15 seconds, it may take 15 seconds or more before a WebException is thrown to indicate a timeout on your request.* ([Reference](https://learn.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.timeout?view=net-5.0#applies-to)) – Peter Csala Jun 28 '21 at 10:16

1 Answers1

1

You should use httpClient instead of HttpWebRequest. I used httpClient and timeout worked fine.

Try this:

using (var httpClient = new HttpClient())
{
    httpClient.Timeout = new TimeSpan(0, 0, 4);

    Stream response =  await httpClient.GetStreamAsync("https://www.website.com/");
    StreamReader reader = new StreamReader(response);
}

HttpClient vs HttpWebRequest

Matheus Dasuke
  • 261
  • 3
  • 9