Laden...

HttpWebRequest

Erstellt von linoge vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.646 Views
L
linoge Themenstarter:in
25 Beiträge seit 2005
vor 19 Jahren
HttpWebRequest

Hallo!

Ich wollte mir gerne ein Programm schreiben das sich automachtich bei Dyndns anmeldet und im mein Usernamem, Passwort und Domän übergibt.

Ich weiß das es solche Programme schon gibt aber ich wollte mal wissen wie man das selber macht.

mein bisheriger Quelltext sieht zur Zeit wiefolgt aus:

//
string Link = "http://USERNAME:PASSWORT@members.dyndns.org/nic/update?system=dyndns&hostname=DOMÄN&myip=ipaddress&wildcard=OFF&%20mx=mail.exchanger.ext&backmx=NO&offline=NO";

HttpWebRequest web =(HttpWebRequest) WebRequest.Create(Link);
HttpWebResponse webr =(HttpWebResponse) web.GetResponse();
webr.Close();
//

Username, Passwort und Domän lese ich aus der Oberfläche aus.
Wo darn liegt es nun das meine IP bei Dyndns nicht aktualisiert wird?

Danke schon mal im vorraus.

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo linoge,

wo hast du den die URL her? Anyway:

Ich habe das mal für meinen dyndns-Account im Browser ausprobiert.
Der Update wird nicht ausgeführt und es wird 'notfqdn' angezeigt., wenn ich nur den hostnamen angebe, wenn ich aber den den Hostnamen inkl. Domäne und Topleveldomain angebe, dann klappt es (Ausgabe jetzt 'good' gefolgt von der IP).

Dabei habe ich die URL übrigens am Ende gekürzt und nur system=, hostname= und myip= angegeben. Probier es mal damit. Ansonsten solltest du zumindest das '%20' entfernen und es erstmal im Browser probieren, bis es klappt. Ich denke, dass es dann auch in C# sofort gehen müsste.

Du solltest darauf achten, wenn das Setzen erfolgreich ist, immer einer neue IP zu verwenden. Ich habe gelesen, dass der Account gesperrt wird, wenn man mehrmals versucht, die bereits schon gesetzte IP zu setzen.

HTH

herbivore

L
linoge Themenstarter:in
25 Beiträge seit 2005
vor 19 Jahren

Hallo herbivore

Ich hatte den link von der Seite www.dyndns.org also genau zu sein von hier:http://www.dyndns.org/developers/specs/syntax.html und dort steht die syntax, die man braucht um ein update dort zu machen.

Also ich bekomme es wohl hin das ich mit meinen c# program den webbrowser öffnen kann und auch das sich so meine ip aktualisiert, aber die lösung gefällt mir nicht.
ich würde es lieber haben das mein selbst geschriebenes programm das automatisch macht ohne browser.

Vielleicht kannst du mir mit dieser info helfen.
danke schön

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo linoge,

mal ein kleiner Einschub, der zeigt, wie ich bei der Problemlösung vorgehe:


string Link = "http://USERNAME:KENNWORT@members.dyndns.org/nic/update?system=dyndns&hostname=DOMÄN&myip=ipaddress";
HttpWebRequest web = (HttpWebRequest) WebRequest.Create(Link);
HttpWebResponse webr = (HttpWebResponse) web.GetResponse();
Stream receiveStream = webr.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader( receiveStream, encode );
char [] read = new char [webr.ContentLength];
readStream.Read(read, 0, (int)webr.ContentLength);
Console.Write (webr.ContentLength + ": ");
Console.WriteLine (read);
receiveStream.Close();
webr.Close();

Ich habe das Programm einfach mal so erweitert (alles Beispielcode aus der Doku), dass ich an den "Rückgabewert" komme. Und siehe da, dieser ist 'badagent'.

Also flink


web.UserAgent ="Mozilla/5.0 (Windows; U; Windows NT 5.0; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1.0";

gesetzt. Und schon sind wir einen Schritt weiter:

System.Net.WebException: The remote server returned an error: (401) Unauthorized.

Tja, und darüber denke ich dann später noch mal nach. 🙂

herbivore

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo linoge,

vor dem 'web.GetResponse()' braucht es zusätzlich noch ein:


web.Credentials = new NetworkCredential (USERNAME, KENNWORT);

dann sollte es klappen. Ob man dann überhaupt noch die Angaben vor dem '@' in der Uri braucht, habe ich jetzt nicht mehr probiert, aber vermutlich nicht.

Ist schon wundersam, die Uri-Klasse kann die UserInfo extrahieren, aber für HttpWebRequest reicht es nicht, die Infos in die Uri zu schreiben, sondern HttpWebRequest will sie extra, tztztz.

HTH

herbivore

Da bei WebRequests immer mal was schiefgehen kann, wäre es nicht schlecht, vorsorglich Exceptions zu fangen.

L
linoge Themenstarter:in
25 Beiträge seit 2005
vor 19 Jahren

Danke herbivore
Hat mir echt weiter geholfen was du mir gesagt hast hier noch mal zur info:

string Link = "http://@members.dyndns.org/nic/update?system=dyndns&hostname="+ domain.Text + ",yourhost2.dyndns.org&myip=ipaddress&wildcard=OFF&%20mx=mail.exchanger.ext&backmx=NO&offline=NO";    			HttpWebRequest web =(HttpWebRequest) WebRequest.Create(Link);    			web.Credentials= new NetworkCredential(user.Text,ps.Text);  			web.UserAgent="myclient/1.0 me@null.net";    			HttpWebResponse webr =(HttpWebResponse) web.GetResponse();  			  			Stream receiveStream = webr.GetResponseStream();			  			Encoding encode = System.Text.Encoding.GetEncoding("utf-8");  			StreamReader readStream = new StreamReader( receiveStream, encode );  	  			status.Text=status.Text+readStream.ReadLine()+"\t"+web.RequestUri+"\t"+"\t";			  			webr.Close();

damit hat es dann auch geklappt