Archive for the ‘Tuturial’ Category

Powershell Webclient DownloadString

Tuesday, June 4th, 2013

Ich beschäftige mich momentan auf der Arbeit ein wenig mit Powershell und ich muss sagen als alter .Net’er es gefällt mir echt sehr gut. Erinnert mich stark an C# hat allerdings wesentlich weniger Overhead für kleinere Anwendungen.

Außerdem finde ich das Powershell für eine Scriptsprache echt sehr mächtig ist.

So nun zum Thema wie lese ich eine Webseite mit einer Webclient in Powershell aus.

Eigentlich eine sehr einfache Sache:


$webclient = new-object System.Net.WebClient

$webpage = $webclient.DownloadString( "url")

Wir erstellen einen Webclient und laden mit Hilfe von webclient.DownloadString dem wir als Parameter die URL geben den Text der Webseite herunter.

Nun gehen wir aber einen Schritt weiter. Wir haben einen Webservice der eine Authentifizierung fordert und wollen auf die Daten die dahinter liegen mit unserem Powersehllscipt zu greifen:

$webclient = new-object System.Net.WebClient
$credCache = new-object System.Net.CredentialCache
$creds = new-object System.Net.NetworkCredential("Benutzername","Password")

$credCache.Add( "URL", "Basic", $creds)
$webclient.Credentials = $credCache

$webpage = $webclient.DownloadString( URL")

Was in diesem Fall hinzu gekommen ist, ist der CrendetialCache dem mit der Add Methode einfach die URL den Authentifizierungstyp und ein Object vom Typ System.Net.NetworkCrendential mit den Parametern unserer Anmeldung zugewiesen wird.

Anschließend müssen wir unseren CrendetialCache nur noch dem WebClient zuweisen um dann auf die Webseite zugreifen zu können.

Zum Schluss komme ich noch zu einem Problem, dass mich eine Zeit lang Beschäftigt hat. Wenn ihr beim Aufrufen der Webseite den folgenden Fehler bekommt:

Ausnahme beim Aufrufen von “DownloadString” mit 1 Argument(en): “Der Server hat eine Protokollverletzung ausgeführt..
Section=ResponseHeader Detail=Auf CR muss LF folgen”

Hab ich für euch auch eine Lösung gefunden:

if($netAssembly)
{
 $bindingFlags = [Reflection.BindingFlags] "Static,GetProperty,NonPublic"
 $settingsType = $netAssembly.GetType("System.Net.Configuration.SettingsSectionInternal")

 $instance = $settingsType.InvokeMember("Section", $bindingFlags, $null, $null, @())

 if($instance)
 {
 $bindingFlags = "NonPublic","Instance"
 $useUnsafeHeaderParsingField = $settingsType.GetField("useUnsafeHeaderParsing", $bindingFlags)

 if($useUnsafeHeaderParsingField)
 {
 $useUnsafeHeaderParsingField.SetValue($instance, $true)
 }
 }
}

Einfach den Code vor eueren WebClient kopieren.
Dadurch wird das useUnsafeHeaderPasing für die Laufzeit des Scriptes auf True gesetzt wodurch der Fehler nicht mehr auf tritt.

Mail Vorlagen mit HTML oder back to the 90th

Sunday, November 25th, 2012

In letzter Zeit habe ich mich wegen einer Umstellung auf ein neues Design der Webseite und Facebook auch mit dem erstellen einer neuen Mail Vorlage beschäftigt.

Auf der Arbeit verwenden wir den David.fx 12 als Mailserver. Die Mail Vorlagen werden hier in einfachem HTML gemacht. Also habe ich angefangen die Webseite als Mail Vorlage umzusetzen und das Layout soweit umgesetzt.

Natürlich habe ich das ganze schön so gemacht wie man heut zu Tage eine Webseite gestaltet mit div Container die entsprechend platziert werden. Das ganze habe ich im Firefox getestet und es sah auch wunderbar aus.

Nachdem ich die Vorlage in den David Server eingebunden habe sah das ganze dann schon nicht mehr ganz so gut aus. Die div Container haben sich wunderbar an den linken Rand gekuschelt und das ganze trotz margin: 0 auto;. Also habe ich ein bisschen rum gegoogled und habe raus gefunden das der Internet Explorer im Quirksmodus diese CSS Eigenschaften nicht kennt und dieser Quirksmodus wird von Tobit wohl bei der HTML Konvertierung benutz.

Na danke ich liebe dich MS!

Also Internet Explorer an, Entwickler Tools an und in den Quirksmodus gesetzt, die div Container mit align:center mittig gesetzt und das ganze sah wieder wunderbar aus.

Also wieder ab mit der Vorlage in den David Server und siehe da es funktioniert. Trotzdem danke an Tobit das ihr so einen neuen HTML Konverter benutz.

Nun zum nächstem Schritt da es sich um eine Mail Vorlage handelt und die nicht nur intern bzw. nicht nur an David Server verschickt wird muss das ganze natürlich auch in einem Outlook Client gut aussehen. Also die Mail zum Test mal an Outlook geschickt. Als ich die Mail in Outlook gesehen habe hat mich fast der Schlag getroffen. Outlook hat die Mail komplett zerrissen und an jegliche CSS Formatierung komplett ignoriert.

Zum zweiten Mal danke an MS!

Also wieder google rausgepackt und gesucht. Herausgefunden habe ich dann, dass Outlook MS Word als HTML Konverter benutz. Wenn ich an das Darstellen von HTML Seiten denke an welcher stelle denke ich dann an MS Word.

Aber egal es muss ja auch in Outlook funktionierten also muss ich irgendwie damit klar kommen. Nun zu den Einschränkungen die Word bei der Anzeige von HTML Seiten hat:

  1. Keine ausgelagerten CSS Eigenschaften im <head> Bereich.
  2. Kein Padding (wird Komplett ignoriert).
  3. Kein Floaten
  4. Keine Background Image Eigenschaft.
  5. Kein z-index
  6. CSS Schrift Formatierungen immer im Tag der Schrift das wird nur bedingt nach unten vererbt

Schlussfolgerung daraus ist, womit wir auch wieder zu der Überschrift kommen, ein Layout muss mit Tabellen erstellt werden und mit sowenig CSS wie Möglich ist damit es in Outlook ordentlich angezeigt wird.

Das ist wohl ein Schlag ins Gesicht für jeden Web-Entwickler der in den letzte 15 Jahren nicht geschlafen hat. Darum liebe Mailclient Entwickler:

bitte verbessert eure HTML Konverter.

Achja GMail zeigt diese Tabellen Layouts übrigens auch richtig an. Andere Mail Clients bzw. Mail Dienste habe ich nicht getestet.