Autor Beitrag
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.12.09 19:56 
Hey, ich habe bereits in einem anderen Forum geschrieben, jedoch keine Antwort bekommen :(

Ich rufe in meinem Hauptprogramm:

1. die Loginfunktion auf "LogIn"
2. hole ich mir den Quelltext einer URL, wofür man Cookies benötigt mit "GetHtml"
3. mache eine Postanfrage mit "GetHtmlPost"
------
4. jetzt will ich mir eine neue URL mit GetHtml holen, jedoch bekomme ich nun bei

ausblenden C#-Quelltext
1:
response = (HttpWebResponse)request.GetResponse();					


in "GetHtml" einen Timeout.

Ich hatte jetzt vor den ersten GetHtml Aufruf (der ja funktioniert, solange noch nicht GetHtmlPost aufgerufen wurde), mit dem GetHtml Aufruf nach GetHtmlPost zu vergleichen. Gibt es im Visual Studio 2008 irgendwie die Funktion, 2 Klassen miteinander zu vergleichen oder hat sonst irgendjemand die Lösung des Problems?

Würde mich sehr freuen, vielen Dank.

Mein Code:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
 class HttpHelper
        {
            private CookieContainer cookieContainer = new CookieContainer();
            HttpWebRequest request;
            HttpWebResponse response;
            StreamReader sr;

public string GetHtml(string url, string useragent, string referer)
            {
                request = (HttpWebRequest)HttpWebRequest.Create(klickurl);
                request.CookieContainer = cookieContainer;
                request.Method = "GET";
                request.Referer = referer;
                request.UserAgent = useragent;
                response = (HttpWebResponse)request.GetResponse();
                sr = new StreamReader(response.GetResponseStream());
                string html = sr.ReadToEnd();
                sr.Close();
                response.Close();
                return html;
            }

            public void GetHtmlPost(string sendestring, string useragent, string sendeurl, string referer)
            {
                request = (HttpWebRequest)HttpWebRequest.Create(sendeurl);
                request.Method = "POST";
                request.Referer = referer;
                request.UserAgent = useragent;
                request.ContentType = "application/x-www-form-urlencoded";
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes(sendestring);
                request.ContentLength = loginDataBytes.Length;
                Stream stream = request.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();
                response = (HttpWebResponse)request.GetResponse();
            }

            public void LogIn(string loginstring, string useragent, string loginurl, string referer)
            {
                request = (HttpWebRequest)HttpWebRequest.Create(loginurl);
                request.CookieContainer = cookieContainer;
                request.Method = "POST";
                request.Referer = referer;
                request.UserAgent = useragent;
                request.ContentType = "application/x-www-form-urlencoded";
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] loginDataBytes = encoding.GetBytes(loginstring);
                request.ContentLength = loginDataBytes.Length;
                Stream stream = request.GetRequestStream();
                stream.Write(loginDataBytes, 0, loginDataBytes.Length);
                stream.Close();
                response = (HttpWebResponse)request.GetResponse();
            }


Zuletzt bearbeitet von BlackMatrix am Mi 16.12.09 21:26, insgesamt 2-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 14.12.09 21:00 
Ich glaube, es wäre schonmal viel geholfen, wenn Du Felder Deine Klasse nicht als globale Variablen missbrauchst, sondern Deine Variablen sauber in den Methoden deklarierst, in denen Du sie auch benutzen willst. Dann kannst Du eine Menge Seiteneffekte vermeiden und die Fehlersuche wird viel einfacher.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.12.09 21:19 
Was meinst du mit:
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
[...]Felder Deine Klasse [...]


Globale Variablen habe ich doch nur den Useragent, den möchte ich auch ändern können, ohne jede Methode durchzugehen. Der Rest bleibt doch lokal. Ich bemerke gerade, dass ich ein Stück Quellcode vergessen habe

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
 class HttpHelper
        {
            private CookieContainer cookieContainer = new CookieContainer();
            HttpWebRequest request;
            HttpWebResponse response;
            StreamReader sr;


Ich habe es oben abgeändert.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 14.12.09 21:24 
Genau das, was Du gerade gepostet hast, sind Felder Deiner Klasse, die Du als globale Variablen "missbrauchst".

Wozu müssen request, response, sr denn als Felder deklariert sein? Die kannst Du auch in jeder Methode neu deklarieren!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.12.09 22:36 
Naja, das hat nichts gebracht, aber wenn ich das Programm neustarte, dann funktioniert meine GetHtml Methode wieder.

Nur was für ein Problem, könnte denn so einen Timeout verursachen? Die Cookies können es nicht sein, dann bekäme ich doch die Seite ohne das ich eingeloggt bin. Der Webrequest und Webresponses werden ja immer nur lokal in meinen Methoden ausgeführt, sodass meine GetHtmlPost Methode ja eigentlich keine Werte veränderen dürfte, weswegen HtmlGet dann danach den Timeout verursacht :-/
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Mi 16.12.09 21:19 
OMG. Ich sitze hier 1,5 Tage nur an der HTMLPost sache und dann liegt es nur an
ausblenden C#-Quelltext
1:
response.Close();					


Schade, dass mir das keiner sagen konnte :(
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 17.12.09 09:03 
Hättest du den Vorschlag von Christian angenommen, wäre es auch eine Lösung gewesen.
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Di 19.01.10 20:31 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Hättest du den Vorschlag von Christian angenommen, wäre es auch eine Lösung gewesen.


Da muss ich dich enttäuschen. Der response muss scheinbar immer geschlossen werden, auch wenn er sich nur innerhalb einer Methode befindet, ansonsten bekommt man den besagten Timeout.
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 19.01.10 20:46 
Wenn du es nicht als Feld sondern in einem using block gemacht hättest, würde er ein Close automatisch machen ! Und dementsprechen wohl gehen...aber wahrscheinlich hast es nicht verstanden....