[VB.NET] New Uri(...) und ".domain.de" (alle subdomains)
NeoGriever
- programmiertechnik
Hallo liebe SelfHTML-Forengemeinde.
Ich habe ein kleines Problemchen(...chen...chen).
Also. Ich möchte via meiner selbstgeschriebenen hweb.dll eine Url laden und darüber ein Cookie auslesen. Das Laden der URL funktioniert tadellos. Kriege den Quelltext wie gewünscht. Jedoch feuert mir diese Seite ein Cookie raus, wo ich mit meinem Wissen scheitere.
Wie jeder VB.NET-Bastler bestimmt weiß, kommt man mittels
[CookieContainer].getCookies(New Uri([URL])
an die Cookies heran.
Jedoch streikt New Uri() bei der Angabe ".domain.de", welches ja zum einschließen aller Subdomains genutzt wird.
Mit "domain.de" komme ich an das Cookie nicht heran. Auch "*.domain.de" greifen nicht.
Gibt es eine andere angabe, um alle Subdomains mit einzuschließen? Oder wie komm ich an das besagte Cookie ran?
hi,
Jedoch streikt New Uri() bei der Angabe ".domain.de", welches ja zum einschließen aller Subdomains genutzt wird.
Nurmalso nebenbei: Den Cookie schickt der Server im HTTP-Header der Response zum Useragent. Die Response ist die Antwort auf einen Request. Ein Request geht an [scheme, auth, path, query_string, fragment]. Auth kann eine Subdomain sein. Die Response kommt von auth über dasselbe scheme wie im Request. Es gibt _einen_ Request, dem _eine_ Response folgt. Das Auslesen des oder der Cookie-Header aus der Response ist für genau _eine_ Response klassifiziert. Ergo auch das Argument in "New Uri()". Wenn Du die Kekse von den Subdomains haben willst, musst Du diese im Einzelnen requesten.
Hotti
-.-
das ist quasi eine antwort, die mir sehr viel sagt, aber meine frage GARNICHT beantwortet.
ich kriege wie gesagt das cookie nicht
auch domain1.domain.de oder dergleichen bringen mir den Cookie NICHT
vielleicht ist das Cookie ja gar nicht da?
vielleicht ist das Cookie ja gar nicht da?
Es ist da.
Und es wird auch gezählt bei .Count. Jedoch krieg ich immer nur 1 cookie, welches jedoch ein werbe-cookie ist für eine Umfrage auf der Seite.
Sagte ich doch, dass das Cookie existiert.
Ein klein trick angewendet und aus .domain.de einfach domain.de gemacht, und schon wirds cookie brav angezeigt.
Wuzah ;)
Meine hweb ist scho was feines ;)
und was soll denn "hweb" sein?
Inzwischen habe ich das Problem beheben können. .net unterstützt das nutzen von sogenannten wildcard-Domainangaben nicht, jedoch akzeptiert der Cookie-Typ ein frei definierbaren String als Domain. Habe einfach in meiner hweb.dll (werde gleich darauf eingehen) gesagt, dass die Domain nicht mit einem . beginnen darf. (If domain.Substring(0,1) = "." Then domain = domain.Substring(1)) und schwupp, schon funktioniert alles.
Die hweb.dll, welche ich geschrieben habe, bietet lediglich 6 Funktionen und 3 Klassen an, mit welcher man sehr leicht komplett vorkonfigurierte HttpWebRequests durchführen kann. Inklusive HTTP 1.1 und allem drum und dran.
Die bereitgestellten Klassen:
hweb.HWeb.HRes = Standard-Rückgabe-Typ. Beinhaltet normalen Quelltext, eventuell die Weiterleitungs-URL und einen Cookie-Speicher (Um den gings hier eigentlich), welcher als ein einfacher CookieContainer auftritt.
hweb.HWeb.HResBIN = Rückgabewert für binäre Daten. Anstelle des Quelltextes wird ein Bytearray zurückgegeben. Ansonsten identisch mit hweb.HWeb.HRes.
hweb.HWeb.HResIMG = Rückgabewert ist direkt eine Grafik, welche man dann direkt weiterverarbeiten kann. Ansonsten identisch mit hweb.HWeb.HRes.
hweb.HWeb = Der eigentliche Funktionsanbieter, welcher vohrer mittels New hweb.HWeb() initialisiert werden muss.
Bereitgestellte Funktionen:
[hweb.HWeb].SendGetData( _
[String] Url, _
[Optional CookieContainer] cookieCol (Nothing), _
[Optional String] referer (""), _
[Optional Boolean] ParseRedirects (False) _
) As hweb.HWeb.Hres
h.SendGetData("http://www.google.de/").Source
----------------------------------------
[hweb.HWeb].SendPostData( _
[String] Url, _
[NameValueCollection] Url, _
[Optional CookieContainer] cookieCol (Nothing), _
[Optional String] referer (""), _
[Optional Boolean] ParseRedirects (False) _
) As hweb.HWeb.Hres
Dim Post_daten As New System.Collection.Specialized.NameValueCollection()
Post_daten.Add("postdatenname","postdateninhalt")
h.SendPostData("http://www.google.de/",Post_Daten).Source
Die funktionen führen sich dann weiter mit SendGetDataBIN, SendPostDataBIN, welche dann ein hweb.HWeb.HResBIN und SendGetDataIMG und SendPostDataIMG welche ein hweb.HWeb.HResIMG zurückgeben.
Diese sind dann noch mit Events bestückt, welche bei einer Header("Location ...")-Weiterleitung feuern und das, was anstelle von ... steht, zurückgeben. Dazu wird ein Event gefeuert, welches bei einem gefundenen Cookie und bei einem gefundenen Header-Cookie (Der Header "SetCookie" wird standardmäßig nicht von httpWebResponse's geparsed) ausgelöst werden.
Im übrigen. Die hweb.dll ist bei mir schon über 1 1/2 Jahre alt und musste bis jetzt nur 1 mal geändert werden. Und das war gestern. Sonst hat sie immer perfekte Dienste geleistet und das erstellen von automatischen downloadern, auslesen von Webseiten und sogar das einloggen in komplexe Login-Systeme ermöglicht.
Und: Ich weiß, dass sie nicht ganz sauber programmiert ist. Hatte aber bisher nie probleme damit XD
Hier gibts Source (Für SharpDevelop 2.2): http://www.megaupload.com/?d=XHID6EGZ
Und compilierte hweb.dll (.net 2 oder höher): http://www.megaupload.com/?d=QLYR295M