Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Import von JSON-Daten ins VB.NET Projekt

Mitglied: Pat.bat

Pat.bat (Level 1) - Jetzt verbinden

26.06.2019 um 13:41 Uhr, 275 Aufrufe, 13 Kommentare, 1 Danke

Hallo zusammen,

ich möchte in meinem vb.net Projekt die aktuellen Feiertage importieren und fand folgende Website: https://feiertage-api.de/

Dort werden die Daten über JSON zur Verfügung gestellt. Vorteil ist, das ich somit immer die aktuelle Feiertage des Jahres habe.

Ich habe nun schon gesucht und probiert, aber leider noch keinen Erfolg gehabt, diese Daten in mein Projekt zu bekommen.

Als nützlich für dieses Vorhaben erweist sich wohl die Bibliothek Newtonsoft.Json.

Der Inhalt der JSON mit Filterung auf MV sieht wie folgt aus:

01.
{"Neujahrstag":{"datum":"2016-01-01","hinweis":""},"Karfreitag":{"datum":"2016-03-25","hinweis":""},"Ostermontag":{"datum":"2016-03-28","hinweis":""},"Tag der Arbeit":{"datum":"2016-05-01","hinweis":""},"Christi Himmelfahrt":{"datum":"2016-05-05","hinweis":""},"Pfingstmontag":{"datum":"2016-05-16","hinweis":""},"Fronleichnam":{"datum":"2016-05-26","hinweis":""},"Tag der Deutschen Einheit":{"datum":"2016-10-03","hinweis":""},"Allerheiligen":{"datum":"2016-11-01","hinweis":""},"1. Weihnachtstag":{"datum":"2016-12-25","hinweis":""},"2. Weihnachtstag":{"datum":"2016-12-26","hinweis":""}}
Über einen Button wollte ich nun die Daten auslesen:

01.
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
02.
        Dim jsonURL As String = "https://feiertage-api.de/api/?jahr=2019&nur_land=MV"
03.
        Dim reader As StreamReader
04.
        Dim errorMsg As String = Nothing
05.

06.
        Try
07.
            Dim request As HttpWebRequest = CType(WebRequest.Create(jsonURL), HttpWebRequest)
08.
            Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
09.
            reader = New StreamReader(response.GetResponseStream())
10.
            Dim jsonStr As String = reader.ReadToEnd()
11.

12.
            PrintJSON(jsonStr)
13.
        Catch ex As WebException
14.
            errorMsg = "Download failed. The response from the server was " +
15.
                CType(ex.Response, HttpWebResponse).StatusDescription
16.
            Console.WriteLine("Error: " + errorMsg)
17.
        End Try
18.
    End Sub
Ich habe mich dabei an eine Vorlage im Web gehalten.

Wenn ich nun auf den Button drücke, erscheint mir folgende Exception:

01.
Ausnahme ausgelöst: "System.Net.WebException" in System.dll
02.
Error: Download failed. The response from the server was Proxy Authorization Required
Ich weiß nicht obs die Hitze im Büro ist, aber ich verstehe gerade nicht warum er eine Proxy Auth möchte :S

Dazu sei gesagt, das ich, wie man sieht, keine Erfahrung mit JSON habe und VB.Net seit ca. 1 Woche aktiv betreibe.


Ich bedanke mich schonmal für eure Zeit und Hilfe.

Grüße,
Pat
Mitglied: SlainteMhath
26.06.2019 um 13:54 Uhr
Moin,

ich bin mir nicht sicher, aber kann HttpWebRequest denn https?

lg,
Slainte
Bitte warten ..
Mitglied: Pat.bat
26.06.2019, aktualisiert um 14:20 Uhr
Gute Idee.

ich habe das nun umgeändert in folgendes:

01.
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
02.
        ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf AcceptCert)
03.

04.
        Dim hreq As HttpWebRequest = CType(HttpWebRequest.Create("https://feiertage-api.de/api/?jahr=2019&nur_land=MV"), HttpWebRequest)
05.
        Dim hres As HttpWebResponse = CType(hreq.GetResponse(), HttpWebResponse)
06.
        Dim s As Stream = hres.GetResponseStream()
07.
        Dim sr As New StreamReader(s)
08.
        Dim html As String = sr.ReadToEnd()
09.

10.
        sr.Close()
11.
        s.Close()
12.

13.
        File.WriteAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\test.txt", html)
14.
    End Sub
15.

16.
    Private Function AcceptCert(ByVal sender As Object, ByVal cert As System.Security.Cryptography.X509Certificates.X509Certificate,
17.
                                ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain,
18.
                                ByVal errors As System.Net.Security.SslPolicyErrors) As Boolean
19.
        Return True
20.
    End Function
angeblich kann man so auch https erreich, allerdings bekomme ich immer noch eine Fehlermeldung:

01.
Der Remoteserver hat einen Fehler zurückgegeben: (407) Proxyauthentifizierung erforderlich.

zusätzliche Ergänzung:

der Betreiber der Seite schreibt noch folgendes:

Der Service ist auf beiden Protokollen zu erreichen. Die Webseite nur per https, aber der API-Endpunkt /api per http und https.
Bitte warten ..
Mitglied: Pat.bat
26.06.2019 um 14:31 Uhr
Nachtrag:

Habs nun hinbekommen.

ich musste noch folgendes ergänzen:

01.
hreq.Proxy.Credentials = CredentialCache.DefaultCredentials
Jetzt muss ich nur noch die Daten richtig im Programm anzeigen und prüfen lassen, anstatt sie in eine Datei auf dem Desktop zu legen.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 26.06.2019, aktualisiert um 14:59 Uhr
Hello again, isch sag einfach hello again ...

Folgende Verweise zusätzlich zum Projekt hinzufügen:

  • System.Web
  • System.Web.Extensions
01.
Imports System.Net
02.
Imports System.Globalization
03.
Imports System.Web.Script.Serialization
04.

05.
Public Class Form1
06.
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
07.
        ' simplen Webclient für den Download
08.
        Dim client As New WebClient
09.
        ' Download als String
10.
        Dim result As String = client.DownloadString("https://feiertage-api.de/api/?jahr=2019&nur_land=MV")
11.
        ' Serializer Objekt erstellen
12.
        Dim j As JavaScriptSerializer = New JavaScriptSerializer()
13.
        ' JSON String in Objekt konvertieren
14.
        Dim json As Object = j.Deserialize(result, GetType(Object))
15.
        ' Über die Items des Objects itterieren
16.
        For Each x As KeyValuePair(Of String, Object) In json
17.
            ' Name des Feiertags
18.
            Dim strName As String = x.Key
19.
            ' Datum des Feiertags in DateTime Objekt wandeln
20.
            Dim d As Date
21.
            DateTime.TryParseExact(x.Value("datum"), "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, d)
22.
            ' und zur Demo ausgeben lassen
23.
            MsgBox(strName & " : " & d.ToString())
24.
        Next
25.
    End Sub
26.
End Class
Grüße Uwe
Bitte warten ..
Mitglied: Pat.bat
26.06.2019 um 15:02 Uhr
Hallo Uwe :D

leider findet er bei mir nicht die Bibliothek System.Web.Script :S
Bitte warten ..
Mitglied: colinardo
LÖSUNG 26.06.2019, aktualisiert um 15:11 Uhr
Ich habe extra geschrieben das du sie erst deinem Projekt über Verweise hinzufügen musst.
und zwar
  • System.Web
und
  • System.Web.Extensions

screenshot - Klicke auf das Bild, um es zu vergrößern

screenshot - Klicke auf das Bild, um es zu vergrößern
Bitte warten ..
Mitglied: Pat.bat
26.06.2019 um 15:13 Uhr
Sorry hatte ich total überlesen.

Funktioniert nun alles einwandfrei und so "einfach" eigentlich.

Man lernt ständig dazu, danke.
Bitte warten ..
Mitglied: colinardo
26.06.2019, aktualisiert um 15:15 Uhr
Man lernt ständig dazu, danke.
Bidde.
Bitte warten ..
Mitglied: Pat.bat
26.06.2019, aktualisiert um 15:31 Uhr
Huch, jetzt kam doch wieder ein Problem.

habe den Code nun aus dem Button geholt und an eine ComboBox angepasst bzw. in eine private Sub gepackt die einen String übergeben haben möchte.

01.
Dim result As String = client.DownloadString("https://feiertage-api.de/api/?jahr=" & Year & "&nur_land=MV")
Die Methode wird immer dann aufgerufen, wenn ich ein anderes Jahr in der Kombobox selektiere. Übergeben wird das Jahr (Year) an die Methode.

Beim starten des Programmes kommt jetzt immer folgender Fehler:

01.
System.Net.WebException
02.
  HResult=0x80131509
03.
  Nachricht = Der Remoteserver hat einen Fehler zurückgegeben: (407) Proxyauthentifizierung erforderlich.
04.
  Quelle = System
05.
  Stapelüberwachung:
06.
   bei System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
07.
   bei System.Net.WebClient.DownloadString(Uri address)
08.
   bei System.Net.WebClient.DownloadString(String address)
09.
   bei DatePickerProsoz.Form1.GetHolidays(String Year) in H:\Entwicklung\Zahllaufkalender\Zahllaufkalender\Zahllaufkalender\Form1.vb: Zeile243
10.
   bei DatePickerProsoz.Form1.ComboBoxFeiertage_SelectedIndexChanged(Object sender, EventArgs e) in H:\Entwicklung\Zahllaufkalender\Zahllaufkalender\Zahllaufkalender\Form1.vb: Zeile229
11.
   bei System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
12.
   bei System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
13.
   bei DatePickerProsoz.Form1.Form1_Load(Object sender, EventArgs e) in H:\Entwicklung\Zahllaufkalender\Zahllaufkalender\Zahllaufkalender\Form1.vb: Zeile62
14.
   bei System.EventHandler.Invoke(Object sender, EventArgs e)
15.
   bei System.Windows.Forms.Form.OnLoad(EventArgs e)
16.
   bei System.Windows.Forms.Form.OnCreateControl()
17.
   bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
18.
   bei System.Windows.Forms.Control.CreateControl()
19.
   bei System.Windows.Forms.Control.WmShowWindow(Message& m)
20.
   bei System.Windows.Forms.Control.WndProc(Message& m)
21.
   bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
22.
   bei System.Windows.Forms.Form.WmShowWindow(Message& m)
23.
   bei System.Windows.Forms.Form.WndProc(Message& m)
24.
   bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
25.
   bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
26.
   bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Bitte warten ..
Mitglied: colinardo
LÖSUNG 26.06.2019, aktualisiert um 15:35 Uhr
Der Remoteserver hat einen Fehler zurückgegeben: (407) Proxyauthentifizierung erforderlich.
Ist doch das selbe wie oben, du hast vergessen deine Proxy-Credentials über die du ins Web gehst im Webclient anzugeben. Der Client hat auch eine "Proxy"-Property!
https://docs.microsoft.com/de-de/dotnet/api/system.net.webclient.proxy?v ...
Bitte warten ..
Mitglied: Pat.bat
26.06.2019, aktualisiert um 15:35 Uhr
Nachtrag:

konnte ich durch folgende Ergänzung lösen :P

01.
' Simplen Webclient für den Download
02.
        Dim client As New WebClient
03.
        client.Proxy.Credentials = CredentialCache.DefaultCredentials

@colinardo Ja, das ist mir beim angucken der Fehlermeldung dann auch in den Sinn gekommen, das das bei dem WebClient ja mitgegeben werden muss ^^

Ich schiebe es mal auf die Hitze hier
Bitte warten ..
Mitglied: SlainteMhath
26.06.2019 um 15:43 Uhr
konnte ich durch folgende Ergänzung lösen :P

Face<-Palm

:O
Bitte warten ..
Mitglied: colinardo
26.06.2019, aktualisiert um 16:02 Uhr
Ich schiebe es mal auf die Hitze hier
Na dann ...
Bitte warten ..
Ähnliche Inhalte
Entwicklung
Json, Powershell und Arrays
gelöst Frage von SunnyRainyDayEntwicklung6 Kommentare

Moin Zusammen, Mit Sicherheit gibt es hier jemanden der mir mit meinem Powershell-Problem behilflich sein kann :) Ich stehe ...

PHP
Json zu unleserlich
gelöst Frage von WPFORGEPHP2 Kommentare

Hallo, ich muss von folder1/test.php zu folder2/test.php weiterleiten. Dabei enthält der ankommende Request sowohl header daten als auch einen ...

Entwicklung
JSON "wenn.dann" integrieren
Frage von greeny95Entwicklung3 Kommentare

Hallo zusammen, ich sitze gerade an der Spaltenformatierung in SharePoint mit JSON Bisher habe ich eine JSON Formatierung mit ...

Hyper-V
Hyper V Projekt
gelöst Frage von DieAzubinneHyper-V9 Kommentare

Hallo, ich muss mich für ein Projekt etwas in Hyper V einarbeiten. Im Moment habe ich eine Server 2012 ...

Neue Wissensbeiträge
Python

Sie meinen es ja nur gut - Microsoft hilft python-Entwicklern auf unnachahmliche Weise

Information von DerWoWusste vor 18 StundenPython2 Kommentare

Stellt Euch vor, Ihr nutzt python unter Windows 10 und skriptet damit regelmäßig Dinge. Nach dem Update auf Windows ...

Sicherheits-Tools

TrendMicro Worry-Free Business Security 10.0 SP1 steht in Englisch bereit mit Unterstützung für Windows 10 1903 (May Update)

Information von VGem-e vor 1 TagSicherheits-Tools1 Kommentar

Moin Kollegen, Dann kommt wohl demnächst auch die deutschsprachige/europäische Version zur Auslieferung. Gruß VGem-e

Batch & Shell
PowerShell Konferenz - Videos online
Information von NetzwerkDude vor 1 TagBatch & Shell

Abend, die Tage werden Videos der Talks von der diesjährigen EU Powershell Konferenz hochgeladen, sind einige Interessante dabei: MFG ...

Windows Update

Windows 10 1903 Updates über Wsus erst nach Auswahl weiterer Produktkategorie

Information von Spirit-of-Eli vor 2 TagenWindows Update6 Kommentare

Moin, den Tipp habe ich hier noch nicht gesehen. Er adressiert all diejenigen, die Windows 10 1903 über einen ...

Heiß diskutierte Inhalte
Erkennung und -Abwehr
Unerklärlicher Gestank im EDV-Raum - "neues" Gebäude und keine offenkundige Ursache feststellbar!
Frage von VGem-eErkennung und -Abwehr28 Kommentare

Moin Kollegen, ich habe seit heute Morgen das Problem, dass in unserem EDV-Raum ein total unerklärbarer Gestank herrscht! Ich ...

LAN, WAN, Wireless
Warum ist die Datenübertragung per WLAN zu bestimmten Servern sehr langsam?
Frage von PluwimLAN, WAN, Wireless17 Kommentare

Hallo Netzwerker, beim Einrichten des Notebooks für einen Bekannten fiel mir auf, dass Downloads per WLAN teilweise extrem lahm ...

Router & Routing
Microsoft Server: Kopierlast auf bestimmte NIC legen für Backup
gelöst Frage von LollipopRouter & Routing15 Kommentare

Guten Tag Mit zwei Servern machen wir eine einfache Datenspiegelung als Teil unseres Backup-Systems. Dazu wünsche ich mir einen ...

Verschlüsselung & Zertifikate
Bitlocker oder Veracrypt unter Win10? Was ist hinsichtlich Performance, Sicherheit, Backup und Kompatibilität besser?
Frage von PluwimVerschlüsselung & Zertifikate15 Kommentare

Guten Morgen, bei mir wird demnächst eine neue Platte fällig, weil ich mein Win7-System auf Win10 umstellen will. D.h. ...