{"id":115,"date":"2013-06-04T14:15:43","date_gmt":"2013-06-04T14:15:43","guid":{"rendered":"http:\/\/blog.dielutte.de\/?p=115"},"modified":"2013-06-04T14:18:53","modified_gmt":"2013-06-04T14:18:53","slug":"powershell-webclient-downloadstring","status":"publish","type":"post","link":"http:\/\/blog.dielutte.de\/?p=115","title":{"rendered":"Powershell Webclient DownloadString"},"content":{"rendered":"<p>Ich besch\u00e4ftige mich momentan auf der Arbeit ein wenig mit Powershell und ich muss sagen als alter .Net&#8217;er es gef\u00e4llt mir echt sehr gut. Erinnert mich stark an C# hat allerdings wesentlich weniger Overhead f\u00fcr kleinere Anwendungen.<\/p>\n<p>Au\u00dferdem finde ich das Powershell f\u00fcr eine Scriptsprache echt sehr m\u00e4chtig ist.<\/p>\n<p>So nun zum Thema wie lese ich eine Webseite mit einer Webclient in Powershell aus.<\/p>\n<p>Eigentlich eine sehr einfache Sache:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n\r\n$webclient = new-object System.Net.WebClient\r\n\r\n$webpage = $webclient.DownloadString( &quot;url&quot;)\r\n\r\n<\/pre>\n<p>Wir erstellen einen Webclient und laden mit Hilfe von webclient.DownloadString dem wir als Parameter die URL geben den Text der Webseite herunter.<\/p>\n<p>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:<\/p>\n<p><a href=\"http:\/\/blog.dielutte.de\/wp-content\/uploads\/2013\/06\/PowershellAuth1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-120\" title=\"PowershellAuth\" src=\"http:\/\/blog.dielutte.de\/wp-content\/uploads\/2013\/06\/PowershellAuth1.png\" alt=\"\" width=\"328\" height=\"209\" srcset=\"http:\/\/blog.dielutte.de\/wp-content\/uploads\/2013\/06\/PowershellAuth1.png 328w, http:\/\/blog.dielutte.de\/wp-content\/uploads\/2013\/06\/PowershellAuth1-300x191.png 300w\" sizes=\"auto, (max-width: 328px) 100vw, 328px\" \/><\/a><\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$webclient = new-object System.Net.WebClient\r\n$credCache = new-object System.Net.CredentialCache\r\n$creds = new-object System.Net.NetworkCredential(&quot;Benutzername&quot;,&quot;Password&quot;)\r\n\r\n$credCache.Add( &quot;URL&quot;, &quot;Basic&quot;, $creds)\r\n$webclient.Credentials = $credCache\r\n\r\n$webpage = $webclient.DownloadString( URL&quot;)\r\n\r\n<\/pre>\n<p>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.<\/p>\n<p>Anschlie\u00dfend m\u00fcssen wir unseren\u00a0CrendetialCache nur noch dem WebClient zuweisen um dann auf die Webseite zugreifen zu k\u00f6nnen.<\/p>\n<p>Zum Schluss komme ich noch zu einem Problem, dass mich eine Zeit lang Besch\u00e4ftigt hat. Wenn ihr beim Aufrufen der Webseite den folgenden Fehler bekommt:<\/p>\n<p><span style=\"color: #ff0000;\">Ausnahme beim Aufrufen von &#8220;DownloadString&#8221; mit 1 Argument(en): &#8220;Der Server hat eine Protokollverletzung ausgef\u00fchrt.. <\/span><br \/>\n<span style=\"color: #ff0000;\">Section=ResponseHeader Detail=Auf CR muss LF folgen&#8221;<\/span><\/p>\n<p>Hab ich f\u00fcr euch auch eine L\u00f6sung gefunden:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\nif($netAssembly)\r\n{\r\n $bindingFlags = &#x5B;Reflection.BindingFlags] &quot;Static,GetProperty,NonPublic&quot;\r\n $settingsType = $netAssembly.GetType(&quot;System.Net.Configuration.SettingsSectionInternal&quot;)\r\n\r\n $instance = $settingsType.InvokeMember(&quot;Section&quot;, $bindingFlags, $null, $null, @())\r\n\r\n if($instance)\r\n {\r\n $bindingFlags = &quot;NonPublic&quot;,&quot;Instance&quot;\r\n $useUnsafeHeaderParsingField = $settingsType.GetField(&quot;useUnsafeHeaderParsing&quot;, $bindingFlags)\r\n\r\n if($useUnsafeHeaderParsingField)\r\n {\r\n $useUnsafeHeaderParsingField.SetValue($instance, $true)\r\n }\r\n }\r\n}\r\n\r\n<\/pre>\n<p>Einfach den Code vor eueren WebClient kopieren.<br \/>\nDadurch wird das useUnsafeHeaderPasing f\u00fcr die Laufzeit des Scriptes auf True gesetzt wodurch der Fehler nicht mehr auf tritt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich besch\u00e4ftige mich momentan auf der Arbeit ein wenig mit Powershell und ich muss sagen als alter .Net&#8217;er es gef\u00e4llt mir echt sehr gut. Erinnert mich stark an C# hat [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,12,11],"tags":[],"class_list":["post-115","post","type-post","status-publish","format-standard","hentry","category-coding","category-powershell","category-tuturial"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=\/wp\/v2\/posts\/115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=115"}],"version-history":[{"count":6,"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=\/wp\/v2\/posts\/115\/revisions"}],"predecessor-version":[{"id":125,"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=\/wp\/v2\/posts\/115\/revisions\/125"}],"wp:attachment":[{"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=115"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.dielutte.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}