URL mit Umlauten
-
Hallo zusammen,
ich lade mit der "WebClient" Klasse und der Methode "DownloadString" einen Text herunter. Als Ergebnis kommt ein CSV Text zurück. Der Service ist nicht von mir. Ergo kann ich an der serverseiten Verarbeitung nichts ändern.
Leider kann es nun vorkommen, dass meine URL bzw. Parameter(Beispiel: https://bla.bla.de/account=Ölgötze) Umlaute enthalten kann. Nun ist mir aufgefallen, dass der Firefox, Chrome und auch der Edge das "ö" und natürlich sämtliche Umlaute escaped. Der IE macht das allerdings nicht. In Wireshark bzw. Burp kann ich auch genau sehen, dass die URL "manipuliert" wurde. Ich bin der Meinung, dass der Server nicht "richtig" damit umgeht aber das hilft an der Stelle nicht weiter. Weiß jemand wie ich .NET dazu überreden kann, die URL so weiterzugeben wie ich sie angebe?
Gruß
-
Eigentlich wollte ich dir gerade eine Lösung direkt über Webrequest vorschlagen. Nun habe ich aber folgendes gefunden: Uri.EscapeDataString
How do i make a http get request with parameters in c#
Damit ergibt sich für deinen Uri folgender Code zur Zusammensetzung:
string address = string.Format( "http://foobar/somepage?account={0}", Uri.EscapeDataString("Ölgötze"));
-
Moin,
naja ich glaube wir verstehen uns etwas falsch:-P
Mein Problem ist, dass .NET/Windows/was auch immer meine Sonderzeichen AUTOMATISCH(und ungefragt!) escaped. Einfachheitshalber habe ich gerade mal von HTTPS auf HTTP umgestellt und sehe in Wireshark, dass immer noch keine Umlaute im Klartext in der URL stehen. Stattdessen nur sowas wie "%C3%B6". Ich brauche aber zwangsläufig ein "ö"(als Beispiel). Deinen Link habe ich trotzdem mal beherzigt und die Parameter nach "best practice" Manier zusammengebaut(die Aufgabe wäre früher oder später eh gekommen). Aber mein Problem besteht immer noch.
-
Nachtrag: Ich versuche es jetzt mal mit einer WebRequest. Ich gebe Bescheid.
-
Selbe Problem:-( Noch mehr Ideen??
-
Du darfst beim Webrequest die Parameter nicht in die Url packen. - Die solltest du gesondert als Header mitgeben.
Und wenn auch das nicht hilft bleibt nur noch den Entwickler des Services zu bitten den Service zu korrigieren. - Denn der Fehler liegt ja eigentlich nicht bei dir sondern bei der Gegenstelle.
-
Dann gehts aber immer noch nicht als UTF8 raus.
Ich habe es jetzt so gelöst, dass ich nicht mehr in .NET eine WebRequest aufmache sondern in C++ die URLDownloadToFile aufrufe. Und da geht's. So ganz passen tut es mir aber nicht aber es funktioniert. Ich denke mal damit ich das Problem erstmal gelöst(auch wenn es nicht das ist was ich mir vorgestellt habe).Danke für die Hilfe!
-
Dir ist schon bewusst das ö's und dergleichen in URLs einfach FALSCH sind?
In URLs *muss* man die escapen.
Wenn der Server ein ö verlangt, bzw kein escapetes ö versteht, dann ist er *broken*!
Investier keine Zeit darin einen kaputten Server zu beackern.
-
Wem sagst du das?! Also nochmal...der Web Service ist NICHT von mir. Ich hätte es auch anders/besser gemacht. Allerdings komme ich nicht drum herum den Service zu nutzen. Wir brauchen das verflixte Ding auf der Arbeit und da führte kein Weg dran vorbei. Momentan funktioniert es ja. Aber was mich wundert...ist es nicht seit 2010 so, dass Umlaute erlaubt sind!? dasörtliche.de ist doch ein Beispiel dafür.
-
Für Domains gelten andere Regeln als für den Rest der URL.