Entwickler-Ecke

ASP.NET und Web - Weiterleitungen im Quelltext realisieren?


BlackMatrix - So 07.02.10 13:58
Titel: Weiterleitungen im Quelltext realisieren?
Hi.

Kann man Quelltextweiterleitungen mit wenig Code realisieren?

Ich möchte gerne, dass mein Programm beim Aufrufen einer Webseite, die selben Weiterleitungen aufruft wie es z.B. mein Firefoxbrowser tut würde.


Wenn ich z.B. Google.de aufrufe, dann ruft mein Firefox Google.de auf (was meine Funktion auch tätigt, wenn ich gethtml mit Google aufrufe).


Dann ruft mein Firefox noch "http://clients1.google.de/generate_204" auf. Das soll nun auch mein Programm tun, indem es die URL, die im Quelltext von Google.de versteckt ist, wieder in die Funktion gethtml schmeißt.


Ich hatte das ganze schon einmal mit Regex und einem rekursiven Weiterleitungsansatz probiert, jedoch ist mein Programm dann bei manchen Seiten aus dem Ruder gelaufen.


Dann habe ich mich bereits über einen HTML Parser informiert, aber ich möchte nur ungern 1000 Zeilen Code in mein kleines Projekt einfügen. Oder habe ich bisher nur noch nicht das richtige gefunden, gibt so einen auch mit weniger Code?


Kann mir jemand sagen, ob man das mit <50 Zeilen Code hinbekommt und wenn ja wie ist der Ansatz? Vielleicht war mein Regex nicht ausgefeilt genug?

MfG Bunnychecker


P.S: Habe es bereits in einem anderem Forum gepostet, jedoch keine Antwort bekommen :(



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
       private static string gethtml(string url)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.CookieContainer = cookiecontainer;
            request.UserAgent = useragent;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            string html = sr.ReadToEnd();
            return html;
        }


Kha - So 07.02.10 14:54

Du meinst das hier [http://stackoverflow.com/questions/1989214/google-com-and-clients1-google-com-generate-204]? Dann wirst du wohl nicht an den Link kommen, solange du nicht den kompletten JS-Code der Seite interpretierst.
Ich stelle mir aber vor allem eine Frage: Warum willst du diesem Link folgen?

user profile iconBlackMatrix hat folgendes geschrieben Zum zitierten Posting springen:
P.S: Habe es bereits in einem anderem Forum gepostet, jedoch keine Antwort bekommen :(
Wäre trotzdem nett, wenn du nächstes Mal verlinkst [http://www.mycsharp.de/wbb2/thread.php?threadid=81321] - vielleicht kommen dort doch noch Antworten hinzu :) .


BlackMatrix - So 07.02.10 15:41

stimmt, hatte ich vergessen zu verlinken ;)

Google war nur ein Beispiel, wahrscheinlich ein zu schweres. Javascript soll mein Programm nicht interpretieren, mein Programm soll nur ein wenig browserrealistischer in Sachen Weiterleitung werden

Wenn ich z.B:

http://www.mycsharp.de/wbb2/thread.php?threadid=81321

aufrufe

dann wird auch

http://www.mycsharp.de/wbb2/myminicity.php

aufgerufen.

Und nun soll mein Programm beide URLs aufrufen, ohne das ich expliziet die URL selber nochmal der Funktion übergebe.


jaenicke - So 07.02.10 16:08

Ich habe es zwar nie ausprobiert, aber in der Doku ist mir eben direkt die Eigenschaft AllowAutoRedirect entgegengesprungen...
http://msdn.microsoft.com/de-de/library/system.net.httpwebrequest.allowautoredirect.aspx


BlackMatrix - So 07.02.10 16:26

Weiß nicht so recht was die Eigenschaft tut, jedenfalls habe ich es mal ausgetestet:

C#-Quelltext
1:
2:
3:
4:
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.mycsharp.de/wbb2/thread.php?threadid=81321");
            myHttpWebRequest.MaximumAutomaticRedirections = 1;
            myHttpWebRequest.AllowAutoRedirect = true;
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();


ruft nur
http://www.mycsharp.de/wbb2/thread.php?threadid=81321
leider jedoch nicht
http://www.mycsharp.de/wbb2/myminicity.php


Christian S. - So 07.02.10 16:31

Wo soll denn da eine Weiterleitung sein? :lupe:

Übrigens spricht AllowAutoRedirect laut Doku nur auf Redirects im HTTP-Header an, nicht im HTML-Quelltext.


jaenicke - So 07.02.10 16:32

Ach jetzt habe ich da erst nachgeschaut was du da meinst... :autsch:

Was haben denn IFrames mit Weiterleitungen zu tun? Das sind eingebettete Inhalte in der aufgerufenen. Und dass die nicht automatisch abgerufen werden, wenn du den Quelltext der einen Seite aufrufst, ist klar.

Da gibt es die Möglichkeit das WebBrowser Control zu benutzen, das automatisch die kompletten Inhalte der Seite herunterlädt. Ist zwar ein wenig aufgebläht, weil es eigentlich ein visuelles Control ist, aber es kann auch Skripte usw. ausführen.


BlackMatrix - So 07.02.10 17:04

Das war dann ein falscher Sprachgebrauch von mir.

Ich habe mit Weiterleitungen die aufgerufenen Seiten gemeint.

Ich habe das ganze mit Live HTTP Header aufgenommen, daher wusste ich, welche Seiten aufgerufen werden.

An die Möglichkeit mit dem WebbrowserControl hatte ich auch schon gedacht, zwar das Control nutzen, aber das ganze gar nicht anzeigen lassen, jedenfalls habe ich es aber nie hinbekommen, meinen Cookieheader direkt mitzugeben, obwohl die Möglichkeit direkt angebot wird:


C#-Quelltext
1:
Webbrowser.Navigate(Uri, nullnull"User-Agent: abc Cookie: abc)                    


Und zu aufgebläht war mir das ganze auch, weswegen ich wieder versucht habe über Regex das Ganze zu lösen.