HttpWebRequest normale Dauer 2 sekunden, reißt aber oft aus auf viel höhere Werte

#1
Hallo,
ihr habt mir bisher immer bei jedem meiner Probleme top geholfen, allerdings habe ich nun etwas echt Schwieriges, wo ich nicht einmal weiß, ob es für dieses Problem einen potenziellen Workaround gäbe.

Als kurze Übersicht:
Ich habe ein Programm geschrieben, welches den Quelltext einer Website anfordert und diesen auswertet.
Normalerweise braucht das Programm, bis zum Punkt an dem der Quelltext gespeichert ist ca. 2 Sekunden
Es gibt allerdings zwischendurch Echtzeitperioden in denen es manchmal über 30 Sekunden braucht und auch nach mehrmaligem Neustarten echt lange braucht, bis es scheinbar durch Zufall irgendwann wieder nur 2 Sekunden braucht.

Habt ihr mit so etwas schon einmal Erfahrung gemacht?
Ein Lösungsansatz für mich wäre über die Time library die Anfrage automatisch neu starten lassen, falls diese länger als 3 Sekunden braucht, allerdings gibt es Fälle, in denen ich dann trotzdem bis zu 1 Minute auf das Ergebnis warten müsste, da diese längeren Phasen eher Blockweise auftreten.

Eine Vermutung wäre eine Traffic Begrenzung seitens der Website, von welcher ich die Daten beziehe.
Ich bin für jeden Tipp und jede Idee dankbar.

Hier der besagte Abschnitt im Code:
Code:
           string html = null;
           string urlAddress = "https://website.de";

            MessageBox.Show(urlAddress);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {


                //MessageBox.Show("2");
                Stream receiveStream = response.GetResponseStream();
                StreamReader readStream = null;
                //MessageBox.Show("3");
                if (response.CharacterSet == null)
                {
                    readStream = new StreamReader(receiveStream);
                    //MessageBox.Show("4");
                }
                else
                {
                    readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
                    //MessageBox.Show("5");
                }

                html = readStream.ReadToEnd();
                //MessageBox.Show("6");
                response.Close();
                readStream.Close();
                //MessageBox.Show("7");
            }
Liebe Grüße
Matthias B.
 

asc

Well-Known Member
c-b Experte
#2
Wenn die Seite einen Rate-Limiter hat kannst du nicht viel machen, die sind nämlich u.a. für genau solche Fälle konzipiert.
Falls du bei einem Provider bist der dir bei einem re-connect eine neue IP gibt (Telekom z.b.) könnte das helfen, wobei schlaue Rate-Limiter dann auch generell Zugriffe auf eine Ressource verlangsamen können (für alle).
 
#3
Wenn die Seite einen Rate-Limiter hat kannst du nicht viel machen, die sind nämlich u.a. für genau solche Fälle konzipiert.
Falls du bei einem Provider bist der dir bei einem re-connect eine neue IP gibt (Telekom z.b.) könnte das helfen, wobei schlaue Rate-Limiter dann auch generell Zugriffe auf eine Ressource verlangsamen können (für alle).
Genau so etwas ist meine Vermutung. Allerdings müsste dieser Rate-Limiter ja demnach zwischen Anfragen von standardmäßigen Webbrowsern wie Mozilla Firefox, Chrome, Internet Explorer und eben diesem Webbrowser, welchen Visual Studio 2017 für C# nutzt, *edit* unterscheiden *edit*.

Die Seite, von der ich spreche ist eine hoch frequentierte Seite, speziell darauf ausgelegt oft aktualisiert und auf verschiedenste Weisen neu geladen zu werden, weshalb es mir so schwerfällt zu glauben das mein beschriebenes Problem Server-Sided ist.
 

asc

Well-Known Member
c-b Experte
#4
Wie beschreiben, der Server identifiziert dich sehr wahrscheinlich anhand deiner IP-Adresse.
Um welche Seite geht es denn? Vielleicht findet man Informationen dazu.
 

asc

Well-Known Member
c-b Experte
#6
Und fragst du da eine API an oder die Seite direkt? Wobei, wenn du dir den Quelltext holst wohl eher direkt.
Wie sieht deine Anfrage denn komplett aus? Setzt du noch irgendwelche HTTP-Header (User-Agent/Accept-XYZ usw.)?
Wie viel Zeit lässt du dir zwischen den Anfragen?
 
Oben