Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[vb.net] XML versand via https

Empfohlene Antworten

Veröffentlicht

Hi Leute,

hab mal wieder eine Frage.

Ich möchte via https eine XML-Datei und ein Zip-Archiv versenden.

hat jemand von euch vielleicht einen Tip, wie sich das umsetzen lässt?

Die bisherigen Beispiele die ich gefunden habe, waren recht wenig hilfreich.

Hoffe, ihr könnt mir auch diesmal helfen.

Beste Grüße

noob

Hi Leute,

hab mittlererweile eine Lösung für das Problem gefunden. Habe damit aber immernoch ein paar Probleme, vielleicht kann mir ja jemand sagen, woran es liegen könnte.

Der Code sieht folgendermaßen aus:

Public Function UploadFile(ByVal filePath As String, _

                                   ByVal address As String, _

                                   ByRef pb As System.Windows.Forms.ToolStripProgressBar) _

                                   As Boolean


        'Get the length of the selected file

        Dim fi As IO.FileInfo = My.Computer.FileSystem.GetFileInfo(filePath)

        Dim fileLength = fi.Length


        'Create the request

        Dim request As HttpWebRequest = _

            DirectCast(HttpWebRequest.Create(address), HttpWebRequest)


        'Configure request

        request.Credentials = New System.Net.NetworkCredential("BENUTZER", "PWD")

        request.Method = "POST" 'WebRequestMethods.Http.Post



        request.ContentLength = fileLength.ToString()

        'request.UserAgent = "http 1.1"

        ' request.ContentType = "http 1.1"


        'This is required for our WebDav server (will error without it)

        'request.SendChunked = True

        'request.Headers.Add("Translate: f")

        'request.AllowWriteStreamBuffering = True


        Dim s As IO.Stream = request.GetRequestStream()

        Dim fs As New IO.FileStream(filePath, IO.FileMode.Open, IO.FileAccess.Read)


        'Größe des Files in KB

        pb.Maximum = CInt(fileLength \ 1024)

        pb.Minimum = 0

        pb.Value = 0

        pb.Visible = True


        Dim bytes(1023) As Byte              '1024 bytes

        Dim bytesRead As Integer = 0

        Dim totalBytesRead As Long = 0


        Do

            bytesRead = fs.Read(bytes, 0, bytes.Length)


            If bytesRead > 0 Then


                totalBytesRead += bytesRead


                'Write to stream

                s.Write(bytes, 0, bytesRead)


                'Update progress

                pb.Value = CInt(totalBytesRead \ 1024)


            End If


        Loop While bytesRead > 0


        s.Close()

        s.Dispose()

        s = Nothing


        fs.Close()

        fs.Dispose()

        fs = Nothing



        Try


            Dim response As HttpWebResponse = _

                DirectCast(request.GetResponse(), HttpWebResponse)


            MsgBox(response.ProtocolVersion)

            'Check the ContentLength of the Response

            Dim code As HttpStatusCode = response.StatusCode


            response.Close()

            response = Nothing


            pb.Visible = False


            'Return Success

            Return (code = HttpStatusCode.OK)

        Catch ex As WebException

            'MsgBox(ex.Response.ResponseUri.AbsoluteUri)

            MsgBox(ex.Message)

        Catch e As Exception

            MsgBox(e.Message)

        End Try


    End Function

Möchte ich nun die Datei versenden, bekomme ich immer den Fehler: "Der Remoteserver hat einen Fehler zurückgegeben: (405) Unzulässige Methode".

Hat jemand eine Ahnung, ob das Problem im Code steckt oder in der Administration des WebServers? Ich habe zwar die Vermutung, dass es am Server liegt, habe aber keinen Einfluss auf dessen Administration.

Wäre super, wenn mir jemand dabei weiterhelfen könnte.

Beste Grüße

noob

sende doch mal testweise ein HTTP POST an den server (z.b. mittels firefox), dann siehst du ja, ob der server die methode unterstützt. wenn nicht, wird das eben administrativ deaktiviert sein oder der server kann nur HTTP GET.

s'Amstel

Hi Amstelchen,

vielen Dank für deine Antwort.

Kannst du mir bitte sagen, wie ich einen Post request via Browser ausführen muss? Steh grad irgendwie auf dem Schlauch.

Habe mir auch schon gedacht, dass es vielleicht an der falschen Methode liegen könnte. Mit Get hat es aber auch nicht funktioniert. Hier erscheint dann anstatt der Fehlermeldung "405 Unzulässige Methode" der Fehler "Inhaltsteil mit dem Verbtyp kann nicht gesendet werden". Mit dieser Fehlermeldung kann ich aber leider genauso wenig anfangen. Weißt du zufällig, was damit gemeint sein könnte?

Gruß

noob

Hi Ted,

hab mir die Beiträge durchgelesen. Habe die Lösung aber immernoch nicht gefunden. Wenn ich das gezeigte Beispiel verwende (Methode Get), kommt zwar kein Fehler mehr, aber es wird trotzdem kein File geuploadet.

Bin mittlererweile wirklich ratlos. :(

Hat niemand ein gutes Beispiel oder Tutorial für mich?

Beste Grüße

noob

lade dir z.b. livehttpheaders für firefox herunter (oder verwende telnet) und setze ein POST an den server ab. eventuell ist ja schon da was im argen.

s'Amstel

Hi Amstelchen,

danke, das hat für Klarheit gesorgt und auch gleich wieder Fragen aufgeworfen. Diesmal liegt es aber eher an meiner mangelden Kenntnis von telnet. Ich habe den Aufruf auf den Server und den dazugehörigen Ordner gestartet (Server/Ordner). War dies falsch oder richtig? Kenne mich mit telnet leider gar nicht aus.

Beste Grüße

noob

darum auch der hinweis, livehttpheaders bevorzugt zu verwenden - wenn du dich mit telnet nicht auskennst.

ansonsten:

Chapter 1. HTTP

dort 1.5.

s'Amstel

Hi Amstelchen,

habe herausgefunden wie es mit telnet geht. Dabei habe ich festgestellt, dass Port 23 des Servers zu ist. Kann das die Lösung sein? Oder ist das nur der telnet-Port und nicht die Lösung meines Problems?

Kann es durch Einstellungen am Server leider nicht herausfinden, da ich keine Rechte auf dem Server besitze.

Gruß

noob

Hi Leute,

habe jetzt nun noch ein wenig recherchiert und dabei habe ich auf der msdn Seite ein Anleitung gefunden, nach der ich folgenden Code erstellt habe:

Private Sub ExchangeXMLByHttps()

        Try

            Dim Path As String

            Dim Adress As String

            Dim FileName As String


            Path = "C:\bin\Debug\testfiles\"

            FileName = "20090713-125202-RueckmeldungKontakt.xml"

            Adress = "https://Server/Upload/"

            Dim myWebClient As New WebClient



            myWebClient.Credentials = CredentialCache.DefaultCredentials

            Dim responseArray As Byte() = myWebClient.UploadFile(Adress, "POST", Path & FileName)

            MsgBox(responseArray.Length)


        Catch webex As WebException

            MsgBox(webex.Message)

            MsgBox(webex.Response)

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try


        'Dim content() As Byte

        'content = ReadFile(Path & FileName)

        'MsgBox(content)

        'UploadFile(Adress, "", FileName, content)


    End Sub

Nun habe ich jedoch immernoch die selben Probleme. Bei der Methode POST kommt Fehler 405 Unzulässige Methode und bei Get kommt ebenfalls eine Fehlermeldung.

Nun habe ich in einem anderen Forum gelesen, dass man zum Dateiupload auf dem Server ein entsprechendes CGI Programm braucht, dass die Datei entgegennimmt. Stimmt das?

Wenn ja, kann mich mal jemand aufklären, wie das Ganze zusammenhängt?

Wenn es daran nicht liegt, kann es sein, dass ich für den Upload die falschen Methoden für https verwende?

Beste Grüße

noob

P.S. Würde mich auch sehr über Beispielcode freuen

habe herausgefunden wie es mit telnet geht. Dabei habe ich festgestellt, dass Port 23 des Servers zu ist. Kann das die Lösung sein? Oder ist das nur der telnet-Port und nicht die Lösung meines Problems?

du musst auf port 80 (HTTP), nicht auf den telnet-port 23.

s'Amstel

Hi Leute,

habs hinbekommen!!!:)

Der Fehler lag sowohl beim Server als auch daran, wie ich den Code verwendet habe.

Bei der Angabe der URI ist unbedingt darauf zu achten, dass das File, das geuploaet werden soll, bereits mit angegeben wird, auch wenn das auf den ersten Blick nicht logisch erscheint, da es sich ja noch nicht auf dem Server befindet.

Der Grund hierfür ist der, dass die Methode aber eine Ressource beim WebServer benötigt, auf die sie sich beziehen kann und das geht nur so.

Beste Grüße und nochmal vielen Dank euch allen für die Hilfe.

noobvb

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.