maddig
Goto Top

CSV Datei via PowerShell und API downloaden

Hallo zusammen,

ich versuche gerade über die API von Ariva eine CSV Datei über PowerShell zu laden.

$path = "C:\temp\out.csv"  
$api = "http://www.ariva.de/quote/historic/historic.csv?secu=40956&boerse_id=34&clean_split=1&clean_payout=0&clean_bezug=1&min_time="+$datepast+"&max_time="+$datecurrent+"&trenner=%3B&go=Download"  

Invoke-WebRequest -Uri $api -OutFile $path -Proxy "http://proxyaddress:3128"  

Folgenden Fehler erhalte ich:

Invoke-WebRequest : Die zugrunde liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden..
In C:\Users\User\Desktop\script.ps1:23 Zeichen:1
+ Invoke-WebRequest -Uri $api -OutFile $path -Proxy "http://proxyaddress. ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Wenn ich mir die $api ausgeben lasse (die Datumsangaben baue ich vorher zusammen, benötigtest Format:z.b. 01.01.2018) und zb in Chrome einfüge, lade ich ganz normal die .csv Datei runter.
Gebe ich der $api einen anderen Wert, von einer Datei die ich selbst hoste, funktioniert alles bestens.

Ich habe unter anderem "wget" (Im Endeffekt ein Invoke-WebRequest), die Methode mit einem WebClient und die BitTransfer Methode ausprobiert. Bei allen Methoden kommt immer ein Verbindungsfehler.

Was ich auch noch getestet haben ist, in Chrome die Entwickler Tools aufmachen und den API Request senden. Dann Bei dem entsprechenden Eintrag unter Network, Rechtsklick und als PowerShell Command kopieren. Dabei kommt auch ein Invoke-WebRequest dabei raus, der mit Header Parametern etc. gefüllt ist. Eben so, wie wenn Chrome den Request machen würde. Funktioniert trz. nicht.

Habt ihr noch eine Idee wie ich es noch probieren könnte? Die Seite scheint den Versuch mit Powershell irgendwie zu erkennen.

mfg
maddig

Content-ID: 427347

Url: https://administrator.de/contentid/427347

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

emeriks
emeriks 11.03.2019 aktualisiert um 13:49:24 Uhr
Goto Top
Hi,
kannst Du den Proxy ausschließen?
Egal, ob Du den auch im Browser eingetragen hast. Wenn Du das Script ohne Proxy ausführen kannst, dann teste das mal. Nur um diesen Punkt auszuschließen.

E.
maddig
maddig 11.03.2019 um 14:19:32 Uhr
Goto Top
Hi,

das ist mir nach dem Posten auch noch eingefallen. Selbes Verhalten in einem anderen Netzwerk ohne Proxy. Das habe ich vorhin noch getestet.

mfg
maddig
erikro
erikro 11.03.2019 um 15:13:27 Uhr
Goto Top
Moin,

Zitat von @maddig:
Habt ihr noch eine Idee wie ich es noch probieren könnte? Die Seite scheint den Versuch mit Powershell irgendwie zu erkennen.

Wenn das Dein Verdacht ist, hast Du dann schon mal mit -userAgent versucht, dem Aufruf z. B. Internet Explorer oder Firefox mitzugeben?

Invoke-WebRequest [...] -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer)

hth

Erik
maddig
maddig 12.03.2019 um 07:07:58 Uhr
Goto Top
Hi,

Danke für den Hinweis mit dem UserAgent. Kommt leider immer wieder der selbe Fehler wie zuvor. Egal ob mit oder ohne Proxy.

Aufruf:
Invoke-WebRequest -Uri $api -OutFile $path -Proxy "http://proxyaddress:3128" -UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer) / Mit Firefox auch schon getestet.  

Invoke-WebRequest : Die zugrunde liegende Verbindung wurde geschlossen: Unerwarteter Fehler beim Senden..
In C:\Users\User\Desktop\script.ps1:23 Zeichen:1
+ Invoke-WebRequest -Uri $api -OutFile $path -Proxy "http://proxyaddress. ...  
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

mfg
maddig
emeriks
emeriks 12.03.2019 um 07:27:14 Uhr
Goto Top
Im Dunkel gestochert:
Versuchs mal mit "-DisableKeepAlive".
maddig
maddig 12.03.2019 um 08:35:10 Uhr
Goto Top
Hi,

habe die Lösung gefunden.

[Net.ServicePointManager]::SecurityProtocol +='tls12'  

Einmalig setzen. Dann funktioniert es ohne Probleme.

Vielen Dank für eure Hilfe !

mfg
maddig
erikro
erikro 12.03.2019 um 08:46:14 Uhr
Goto Top
Schön, dass Du das gelöst hast. Seltsam ist das aber, weil es ja im Browser auch ohne TLS geht.
138810
138810 12.03.2019 aktualisiert um 09:13:46 Uhr
Goto Top
Zitat von @erikro:

Seltsam ist das aber, weil es ja im Browser auch ohne TLS geht.
Invoke-WebRequest verwendet einen IE-Kompatibilitätsmodus bei der Nutzung in der Powershell, der nur das Basis TLS und das alte SSL aktiviert hat. Da sich nun in den letzten Jahren die Seiten mit moderneren Ciphersuiten erhöht haben ist diese Option jetzt bi HTTPS Zugriff nötig geworden damit der Zugriff weiterhin möglich ist.
erikro
erikro 12.03.2019 um 09:13:38 Uhr
Goto Top
Zitat von @138810:

Zitat von @erikro:

Seltsam ist das aber, weil es ja im Browser auch ohne TLS geht.
Invoke-WebRequest verwendet einen IE-Kompatibilitätsmodus bei der Nutzung in der Powershell, der nur das Basis TLS 1.0 aktiviert hat. Da sich nun in den letzten Jahren die Seiten mit moderneren Ciphersuiten erhöht haben ist diese Option jetzt nötig geworden.

Ja schon. Aber im Browser geht der Download ohne TLS. Ich hatte ja den Verdacht und habe es im Browser ausprobiert, ob auf Verschlüsselung bestanden wird. Im Browser ging es nur mit http ohne TLS-Handshake. Deshalb hatte ich die Idee verworfen. Das ist es, was mich wundert.
138810
138810 12.03.2019 aktualisiert um 09:19:35 Uhr
Goto Top
Also hier macht das Ding einen Https Redirect 301, deswegen wundert es mich nicht.
erikro
erikro 12.03.2019 um 09:17:12 Uhr
Goto Top
Komisch ... Naja, ist auch egal. face-wink