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-Key: 427347

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

Printed on: April 23, 2024 at 16:04 o'clock

Member: emeriks
emeriks Mar 11, 2019 updated at 12:49:24 (UTC)
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.
Member: maddig
maddig Mar 11, 2019 at 13:19:32 (UTC)
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
Member: erikro
erikro Mar 11, 2019 at 14:13:27 (UTC)
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
Member: maddig
maddig Mar 12, 2019 at 06:07:58 (UTC)
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
Member: emeriks
emeriks Mar 12, 2019 at 06:27:14 (UTC)
Goto Top
Im Dunkel gestochert:
Versuchs mal mit "-DisableKeepAlive".
Member: maddig
maddig Mar 12, 2019 at 07:35:10 (UTC)
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
Member: erikro
erikro Mar 12, 2019 at 07:46:14 (UTC)
Goto Top
Schön, dass Du das gelöst hast. Seltsam ist das aber, weil es ja im Browser auch ohne TLS geht.
Mitglied: 138810
138810 Mar 12, 2019 updated at 08:13:46 (UTC)
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.
Member: erikro
erikro Mar 12, 2019 at 08:13:38 (UTC)
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.
Mitglied: 138810
138810 Mar 12, 2019 updated at 08:19:35 (UTC)
Goto Top
Also hier macht das Ding einen Https Redirect 301, deswegen wundert es mich nicht.
Member: erikro
erikro Mar 12, 2019 at 08:17:12 (UTC)
Goto Top
Komisch ... Naja, ist auch egal. face-wink