Entwickler-Ecke

WinForms - Problem bei Quellcode auslesen.


Fakiz - Di 24.04.12 18:53
Titel: Problem bei Quellcode auslesen.
Guten Abend ich würde wie der Titel schon sagt gerne den Quellcode einer Internetseite (vermute mal das es sich um ein Serverinterface handelt) auslesen. Es handelt sich dabei um diese Seite:

*Klick Mich* [http://mp3stream1.apasf.apa.at:8000/index.html]

Nun habe ich versucht über einen Webclient an den Quellcode zu kommen sowie über Webrequest bei beiden varianten erhalte ich folgende Fehlermeldung:

Zitat:
Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseStatusLine


Dieser fehler tritt in folgender Zeile auf:


Quelltext
1:
string title = titleRegex.Match(webClient.DownloadString(Fm4Url)).NextMatch().Value;                    


Weiß den jemand woran das liegt?


Oliver M. - Fr 27.04.12 15:44

Eigentlich müsstest du mit

C#-Quelltext
1:
string sourcecode = new StreamReader(WebRequest.Create(uri).GetResonse().GetResponseStream()).ReadToEnd();                    

die Quellcode jeder http- (und soweit ich weis auch https-) Website auslesen können.
Die Fehlermeldung, die du genannt hast, hört sich so an, als würde sich der Server nicht richtig an das http-Protokoll halten, was mich aber sehr wundert. Wenn du mir ein paar genauere Detais geben könntest, könnte ich dir vielleicht weiter helfen.
MfG Oliver.


Fakiz - Fr 27.04.12 16:55

Das dachte ich auch, ich hatte auch bislang noch nie Probleme beim auslesen eines Quellcodes. Die Fehlermeldung kommt nicht wenn ich die einstellungen meines Projekts ändere und


Quelltext
1:
<httpWebRequest useUnsafeHeaderParsing = "false" />                    


auf True setze. Jetzt kann ich den Quellcode zwar "auslesen" das ganze geht dann aber in eine Endlosschleife über, abgesehen davon besteht der String den ich zurück bekomme aus lauter Sonderzeichen. Der Quellcode läßt sich allerdings via Controll (Webbrowser) ohne Probleme auslesen und verwerten.

Das sind jetzt alle wichtigen Infos die mir im Moment einfallen.


Trashkid2000 - Fr 27.04.12 21:51

Hi,
also bei der URL handelt es sich um einen mp3-Stream.
Was willst Du denn da auslesen? Der Stream ist doch für einen Player gedacht, um sich Internetradio anzuhören.


Oliver M. - So 29.04.12 10:13

Der Web-Browser öffnet es ausolut Sauber, das heißt, es hanselt sich um HTML. Außer dem ist es das http-Protokoll, was, egal was der Inhalt ist, vom HttpWebRespone ausgelesen werden müssste.


jaenicke - So 29.04.12 11:45

Der Webbrowser gibt auch einen Useragent an. Der Server prüft den und schickt schlicht je nach Useragent etwas anderes zurück. Und da du keinen angibst... Mit geht es problemlos, habs grad getestet.


Oliver M. - So 29.04.12 12:14

user profile iconjaenicke, du hast recht. Macht aber nichts, denn man kann ja einfach einen UserAgent angeben:


C#-Quelltext
1:
2:
3:
4:
string uri = "http://mp3stream1.apasf.apa.at:8000/index.html";
HttpWebRequest request = HttpWebRequest.CreateHttp(uri);
request.UserAgent = "Mozilla";
string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();

Dann klappts, auch wenn man useUnsafeHeaderParsing nicht auf true setzt :wink:.

MfG Oliver M.


jaenicke - So 29.04.12 13:01

user profile iconOliver M. hat folgendes geschrieben Zum zitierten Posting springen:
Dann klappts, auch wenn man useUnsafeHeaderParsing nicht auf true setzt :wink:.
Habe ich ja geschrieben, dass es so geht (mein Testcode sah fast genauso aus). ;-)


Oliver M. - So 29.04.12 13:08

Du hast zwar gesagt, dass es geht und dass man einen UserAgent angeben muss, aber nicht wie. Also habe ich nochmel den Code gepostet.


Fakiz - So 29.04.12 23:18

Ich danke euch vielmals, jetzt kann ich mir den Webbrowser sparen.