Avatar billede gadebarnet Nybegynder
14. februar 2005 - 18:14 Der er 21 kommentarer og
1 løsning

hente til application fra http

Hvis jeg nu i min application gerne vil kunne hente f.eks:

http://www.jegvilgerne.dk/default.asp?id=99999

Den fil der kommer derfra vil jeg gerne kunne gemme lokalt på min harddisk... Ligesom hvis jeg smed linket ind i en browser.

Det skal så bare forgå fra min application...

Hvordan gøres det ?
Avatar billede arne_v Ekspert
14. februar 2005 - 18:22 #1
Brug WebRequest. Eksempel:

Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
  Public Shared Sub Main(ByVal args As String())
      Dim req As HttpWebRequest = CType(WebRequest.Create("http://www.microsoft.com/"), HttpWebRequest)
      Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
      Dim instm As Stream = resp.GetResponseStream
      Dim outstm As Stream = New FileStream("C:\ms.html", FileMode.CreateNew, FileAccess.Write)
      Dim b(1000) As Byte
      Dim n As Integer
      n = instm.Read(b, 0, b.Length)
      While (n > 0)
          outstm.Write(b, 0, n)
          n = instm.Read(b, 0, b.Length)
      End While
      outstm.Close
      instm.Close
      resp.Close
  End Sub
End Class
Avatar billede arne_v Ekspert
14. februar 2005 - 18:24 #2
og et svar
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 18:35 #3
Pisse godt...

Hvis nu jeg skal have 5 id'er havde jeg tænkt at lave en for->next

Men skal jeg køre den hele i den for->next ?
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 18:35 #4
Og hvad med filnavnet... Det har jeg ikke... Det modtager den fra siden ? altså fra
http://www.jegvilgerne.dk/default.asp?id=99999
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 18:38 #5
Og hvad nu hvis det er en zip fil den modtager og IKKE en html side =?
Avatar billede arne_v Ekspert
14. februar 2005 - 18:40 #6
Det er jo hele 3 ønsker på en gang !

:-)

Jeg prøver lige at bixe noget.
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 18:44 #7
SUper...

Jeg skal gerne smide nogle flere point...

Jeg sidder selv og leger lidt, men jeg er jo ikke HAJ som dig :)
Avatar billede arne_v Ekspert
14. februar 2005 - 19:14 #8
Jeg har ikke rigtigt mulighed for at teste det og jeg ved ikke hvad din server
sender af headere, men her er et forslag:

Imports System
Imports System.IO
Imports System.Net
Imports System.Text

Class MainClass
  Public Shared Sub Download(url As String)
      Dim req As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
      Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
      Dim instm As Stream = resp.GetResponseStream
      Dim fnm As String = resp.Headers("Content-Disposition").Split("""")(1)
      Dim outstm As Stream = New FileStream(fnm, FileMode.CreateNew, FileAccess.Write)
      Dim b(1000) As Byte
      Dim n As Integer
      n = instm.Read(b, 0, b.Length)
      While (n > 0)
          outstm.Write(b, 0, n)
          n = instm.Read(b, 0, b.Length)
      End While
      outstm.Close
      instm.Close
      resp.Close
  End Sub
  Public Shared Sub Main(ByVal args As String())
      Dim id() As Integer = { 123, 456, 789 }
      Dim i As Integer
      For i = 1 To 3
          Call Download("http://www.domain.dk/download.asp?id=" & id(i))
      Next
  End Sub
End Class
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 19:19 #9
Her er min egen løsning, som jeg lige har fixet...

Dim filnavn
        Dim navn
        Dim size, l, startv, stopv
        startv = 100
        stopv = 500
        Dim i
        For i = startv To stopv
            Label1.Text = i & " -> " & stopv & ""
            Label1.Update()
            Try
                Dim req As HttpWebRequest = CType(WebRequest.Create("http://server/download.asp?str_id=" & i & "&d=1&t=f"), HttpWebRequest)
                Dim resp As HttpWebResponse = CType(req.GetResponse, HttpWebResponse)
                filnavn = resp.ResponseUri.AbsoluteUri.Split("/")
                navn = filnavn(UBound(filnavn))
                size = resp.ContentLength()
                Dim instm As Stream = resp.GetResponseStream
                Dim outstm As Stream = New FileStream("C:\" & navn & "", FileMode.CreateNew, FileAccess.Write)
                Dim b(10000) As Byte
                Dim n As Integer
                ProgressBar1.Value = 0
                ProgressBar1.Minimum = 0
                ProgressBar1.Maximum = Fix(size / 10000)

                ProgressBar1.Step = 1

                n = instm.Read(b, 0, b.Length)
                l = 0
                While (n > 0)
                    outstm.Write(b, 0, n)
                    n = instm.Read(b, 0, b.Length)
                    l = l + b.Length
                    ProgressBar1.PerformStep()
                    Label2.Text = l & "-> " & size
                    Label2.Update()
                End While
                outstm.Close()
                instm.Close()
                resp.Close()
            Catch ex As Exception

            End Try

        Next





Og den virker som den skal :)


Men du får lige point... Men hvis jeg nu "falder" over noget som ikke fungere, så skriver jeg lige... men tak (som altid)
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 19:33 #10
Så er der krise:

Cannot handle redirect from http/https protocols to other dissimilar ones


Hvad kan jeg gøre ved det ?
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 19:51 #11
Den bliver smidt vidre til en ftp... Og det kan den ikke finde ud af... Hvordan fikser man det ?
Avatar billede arne_v Ekspert
14. februar 2005 - 19:53 #12
Ups. Problem !
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 19:55 #13
Kan man ikke få det som den modtager of så lave en ny ftp request ?
Avatar billede arne_v Ekspert
14. februar 2005 - 20:05 #14
Principielt kan man jo alt.

Men jeg er lidt bange for at vi skal ned på socket niveau.

Connecte til port 80, sende valid HTTP request, læse response, se FTP URL,
connecte til FTP server port 21, åbne data connection og retreive filen.
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 20:27 #15
ftp forbindelsen som den opretter, har et temp password og brugerid som kun virker lige der, derfor skal det ske lige efter...

Kan du bakse noget sammen ?
Avatar billede arne_v Ekspert
14. februar 2005 - 20:59 #16
Måske
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 21:03 #17
det ville være dejligt... :)

Jeg smider nogle flere point
Avatar billede gadebarnet Nybegynder
14. februar 2005 - 23:42 #18
ville du kigge på det
Avatar billede arne_v Ekspert
15. februar 2005 - 07:48 #19
Ja

Men det er ikke noget man bare laver - og jeg skal også lave andet en gang
imellem f.eks. sove
Avatar billede gadebarnet Nybegynder
15. februar 2005 - 08:30 #20
Det er jeg helt med på, men det kunne jo være at du havde noget liggende... :)
Avatar billede gadebarnet Nybegynder
16. februar 2005 - 10:26 #21
Ville du kigge på det arne ?

Kan man ikke få den tilbage ftp adresse som kommer, som webrequest ikke kan finde ud af og så sende den til en iexplorer med det samme ?
Avatar billede arne_v Ekspert
16. februar 2005 - 22:34 #22
Jeg tror jeg melder pas.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester