Avatar billede speedo Nybegynder
17. januar 2004 - 11:48 Der er 67 kommentarer og
2 løsninger

File size over HTTP, (HURTIGT SVAR)

Hvordan læser jeg en fils størrelse, når dens placering f.eks er "http://12.12.12.12/12.exe".

Håber der er en der kan hjælpe mig :D
Pls, svar hurtigst muligt
Avatar billede speedo Nybegynder
17. januar 2004 - 11:48 #1
lngBytes = FileLen("C:\thefile.txt")

Men dur ikke til "HTTP"
Avatar billede arne_v Ekspert
17. januar 2004 - 12:02 #2
Det kan ikke altid lade sig gøre.

Du kan sende en HTTP request efter den og se om
web serveren sender en Content-Length header tilbage.

Hvis den gør det, så an du bruge den.

Ellers må du hente filen og se hvor stor den bliver.
Avatar billede speedo Nybegynder
17. januar 2004 - 12:18 #3
Okay, men øhh. Hvordan går jeg det, kan du ikke skrive en vb kode. (Helst simpel)
Avatar billede arne_v Ekspert
17. januar 2004 - 12:25 #4
Beklager - jeg ved hvordan man laver det i en 5-6 andre sprog men
ikke VB.

Jeg postede kun en kommentar fordi det måske kunne give er mere VB kyndig
men mindre HTTP kyndig et hint til at lave noget til dig.
Avatar billede speedo Nybegynder
17. januar 2004 - 12:39 #5
Okay, thx any way :D

Håber der er andre der kan svare på mit spørgsmål, har virkelig brug for dette svar!!!!
Avatar billede mikker Nybegynder
17. januar 2004 - 14:19 #6
Avatar billede mikker Nybegynder
17. januar 2004 - 14:20 #7
Avatar billede speedo Nybegynder
17. januar 2004 - 15:38 #9
Hmmm, det kan jeg jo ikke bruge, det er jo ikke til visual basic !!! :S
Avatar billede arne_v Ekspert
17. januar 2004 - 15:56 #11
Hvis jeg med min begrænsede VB viden forstår sidstnævnte ret så skal det være noget
a la:

Private Sub Command1_Click()
    Dim HttpReq As Object
    Set WinHttpReq = New WinHttpRequest
    HttpReq.Open "GET", "http://www.domain.dk/dir/fil.ext", False
    HttpReq.Send
    Text1.Text = HttpReq.GetResponseHeader("Content-Length")
End Sub
Avatar billede speedo Nybegynder
17. januar 2004 - 16:40 #12
Skal man bruge andet end en Knap og en tekstboks, for der kommer en fejl.
(Compile - Error)
Avatar billede arne_v Ekspert
17. januar 2004 - 16:48 #13
Nej.

Men har du nærlæst dette:

The application uses some of the methods and properties of the WinHttpRequest object. Use early binding to access this object by completing the following two steps.

  1. From the Project menu, choose References.
  2. On the list of Available References, select Microsoft WinHttpRequest Component, version 5.0 and click OK.

If the WinHttpRequest object is not available on the Available References list, WinHttp.dll has not been properly installed or is not registered.

?
Avatar billede speedo Nybegynder
17. januar 2004 - 16:53 #14
Oki, thx. Jeg prøver lige :D
Avatar billede speedo Nybegynder
17. januar 2004 - 16:57 #15
Hmmm, mærkeligt. Kunnei íkke finde Winhttprequest, men i stedet Winhttp service 5.0.
Men nu siger den bare en anden fejl, tror du der er mere jeg har glemt
Avatar billede speedo Nybegynder
17. januar 2004 - 17:21 #16
Har du testet det på din pc, for jeg kan ikke få det til at virke!!! :S
Avatar billede arne_v Ekspert
17. januar 2004 - 18:26 #17
Jeg kan ikke finde nogen af dem ...

Jeg leder lige lidt.
Avatar billede arne_v Ekspert
17. januar 2004 - 18:54 #18
Jeg fik installeret den så jeg fik en Winhttp service 5.0
og da jeg så rettede den lille kod ebøf så virkede det faktisk !

Private Sub Command1_Click()
    Dim HttpReq As Object
    Set WinHttpReq = New WinHttpRequest
    WinHttpReq.Open "GET", "http://www.microsoft.com/", False
    WinHttpReq.Send
    Text1.Text = WinHttpReq.GetResponseHeader("Content-Length")
End Sub
Avatar billede arne_v Ekspert
17. januar 2004 - 18:55 #19
Virker hos mig
Avatar billede arne_v Ekspert
17. januar 2004 - 18:56 #20
Eller pænere:

Private Sub Command1_Click()
    Dim WinHttpReq As Object
    Set WinHttpReq = New WinHttpRequest
    WinHttpReq.Open "GET", "http://www.microsoft.com/", False
    WinHttpReq.Send
    Text1.Text = WinHttpReq.GetResponseHeader("Content-Length")
End Sub
Avatar billede arne_v Ekspert
17. januar 2004 - 18:57 #21
Og jeg beklager naturligvsi min fumlen rundt i HttpReq versus WinHttpReq,
men jeg er som sagt ikke vant til at kode i VB.
Avatar billede speedo Nybegynder
17. januar 2004 - 19:02 #22
Har fundet ud af det :D

Dim WinHttpReq As WinHttp.WinHttpRequest
Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
Const HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1

Private Sub Form_Load()
    'Create an instance of the WinHttpRequest object.
    Set WinHttpReq = New WinHttpRequest
End Sub

' This subroutine requests a resource without supplying
' authentication credentials.
Private Sub Command1_Click()
   
    ' Assemble an HTTP request.
    WinHttpReq.Open "GET", _
        "http://microsoft.com", False
       
    ' Send the HTTP Request.
    WinHttpReq.Send
   
    ' Display the status code and response headers.
    Text1.Text = WinHttpReq.GetResponseHeader("Content-Length")
    Text1.Text = Text1.Text / Val(1024)

End Sub
Avatar billede arne_v Ekspert
17. januar 2004 - 19:03 #23
Oh - du kører med proxy server !
Avatar billede speedo Nybegynder
17. januar 2004 - 22:58 #24
Faktisk, er der noget jeg ikke fatter.
"Content-Length" = ??? Er det file size ???

Fordi, så passer det ikke helt. Den kommer med forkerte tal !!!! :S
Avatar billede arne_v Ekspert
17. januar 2004 - 23:01 #25
Den burde give fil størrelsen.

Der er ingen garanti for at den er der.

Og der er heller ingen garanti for at den er rigtig.

Jeg vil dog tro, at hvis den er der, at den så er rigtig.
Avatar billede speedo Nybegynder
17. januar 2004 - 23:15 #26
Hmmm, jamen den tjekke en fil som fylder 100 mb.
og den's resultat er "20541", og det hænger jo ikke sammen nogen steder!!!
Avatar billede arne_v Ekspert
17. januar 2004 - 23:17 #27
Det gør det ikke.

Er det en public tilgængelig URL som jeg kan prøve ?
Avatar billede speedo Nybegynder
17. januar 2004 - 23:22 #28
Nej, desværre. Men hvis vi nu prøver det samme link, så kan vi se om vi for forskellige svar.

Er det okay med dig ???
Avatar billede arne_v Ekspert
17. januar 2004 - 23:23 #29
okey dokey
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:26 #30
http://www.sofie.jacobsen.org/sofie.jpg siger den:
Content-Length: 27659

Lad os prøve det først
Avatar billede speedo Nybegynder
17. januar 2004 - 23:30 #31
Hmmmm der er noget galt, lige så snart det ikke er på min http server. Så fryser programmet. Hvorfor fanden går den det :(
Avatar billede arne_v Ekspert
17. januar 2004 - 23:31 #32
VB koden siger 27659
Avatar billede speedo Nybegynder
17. januar 2004 - 23:31 #33
Okay, det går min oxo "27659", og hvad fylder billedet så. Passer det nogle steder
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:32 #34
Hmm, hvor finder vi så en fil på 100 MB ?  ;)
Avatar billede speedo Nybegynder
17. januar 2004 - 23:32 #35
Hmmm, det samme.
Avatar billede arne_v Ekspert
17. januar 2004 - 23:32 #36
Download med browser siger:

17/01/2004  23:32              27,659 sofie.jpg

så den passer !
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:33 #37
Ja ja, tallet er rigtig nok. Det bare en "hvis det her ikke virker, SÅ er
der noget galt"-test
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:35 #38
Men http-protokollen tillader en "Chunked" overførsel, hvor størrelsen ikke
er kendt på forhånd.

Eller at længden slet ikke angives. Det sker fx på http://www.sofie.jacobsen.name/
Her er alt man får:

HTTP/1.1 200 OK
Date: Sat, 17 Jan 2004 22:34:21 GMT
Server: Apache/1.3.22 (Unix)  (Red-Hat/Linux) mod_ssl/2.8.5 OpenSSL/0.9.6 PHP/4.1.1 mod_perl/1.24_01
X-Powered-By: PHP/4.1.1
imagetoolbar: no
Connection: close
Content-Type: text/html
Avatar billede speedo Nybegynder
17. januar 2004 - 23:40 #39
Hmmm, for få oplysningerne. Så skal man hente hele filen
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:41 #40
Prøv så denne og fortæl hvad den siger med jeres VB
  http://www.dmu-stud.dk/~ej/storfil
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:42 #41
Længden angives *sædvanligvis* hvis det bare er en fil - men sjældent hvis
det er resultatet af et script. http://www.sofie.jacobsen.name/ er et script
Avatar billede speedo Nybegynder
17. januar 2004 - 23:45 #42
???

Jo større filen er, tager det så længere for at få oplysningerne

???
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:47 #43
Ja,  med en GET - man kan lave en HEAD som undlader at sende kroppen med.
Avatar billede speedo Nybegynder
17. januar 2004 - 23:48 #44
Skriver man så bare HEAD, i stedet for GET ???
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:49 #45
Hvis I kører Windows kan I lege med et rigtigt sødt program:
http://www.hasselager.net/ftp/vhead102.zip  som netop kigger
på HTTP-headere (det er en anelse nemmere end at bruge telnet til det *g*)
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:49 #46
ja, speedo.
Avatar billede arne_v Ekspert
17. januar 2004 - 23:51 #47
Jeg har prøvet HEAD - den returnerede ikke Content-Length.
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:52 #48
Og en anden ting: hvis du bruger koden fra 19:02:02 synes jeg der
mangler en linie med Host i din forespørgsel. Det vil så ikke virke
på servere med flere domæner.

Og til slut - jeg har luret i spørgsmålet for at se den, der ville fortælle
dig, at det er et håbløst projekt du har gang i. Og det mener jeg. Men nu
er jeg så lidt nysgerrig efter hvor (lidt) langt man kan nå.
Avatar billede speedo Nybegynder
17. januar 2004 - 23:52 #49
Jamen, halløj. Nu virker det sku' da, tak for hjælpen erikjacobsen :D
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:53 #50
Den returnerer faktisk nedenstående - jeg ved så ikke hvorfor du ikke får den.

HTTP/1.1 200 OK
Date: Sat, 17 Jan 2004 22:56:16 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.1
Last-Modified: Sat, 17 Jan 2004 22:43:31 GMT
ETag: "2700a9-6519400-4009ba93"
Accept-Ranges: bytes
Content-Length: 106009600
Connection: close
Content-Type: text/plain
Avatar billede speedo Nybegynder
17. januar 2004 - 23:54 #51
HVad mener du med dit sidste spørgsmål "langt man kan nå"
Avatar billede erikjacobsen Ekspert
17. januar 2004 - 23:55 #52
Du vil ikke kunne få det til at virke 100%
Avatar billede arne_v Ekspert
17. januar 2004 - 23:57 #53
Det var et andet link jeg testede HEAD på.
Avatar billede arne_v Ekspert
17. januar 2004 - 23:58 #54
Jeg mener at jeg flere gang har understreget at man ikke kan være sikker på at
få en Content-Length.
Avatar billede speedo Nybegynder
18. januar 2004 - 00:08 #55
Yes yes, men nu har jeg et andet problem.
Når jeg nu download en fil, via mit prog. Så låser den alt i programmet, end til den er færdig.
??? Hvordan undgår jeg det ???
Avatar billede arne_v Ekspert
18. januar 2004 - 00:09 #56
Jeg mener at det er det som 3. argument styrer !
Avatar billede speedo Nybegynder
18. januar 2004 - 00:11 #57
???
Avatar billede speedo Nybegynder
18. januar 2004 - 00:12 #58
Hvis det er point du vil ha, så skal du nok få flere! :D
Avatar billede arne_v Ekspert
18. januar 2004 - 00:13 #59
Prøv og kald open med 3. argument som True
Avatar billede arne_v Ekspert
18. januar 2004 - 00:13 #60
Eller snakker vi om noget helt andet end WinHttpReq.Open kaldet ?
Avatar billede speedo Nybegynder
18. januar 2004 - 00:15 #61
??????????????
3, eller 2 jeg har kun 2
Avatar billede speedo Nybegynder
18. januar 2004 - 00:15 #62
nej nej, det er en hel anden koden. Skal jeg sende den ??? :S
Avatar billede speedo Nybegynder
18. januar 2004 - 00:16 #63
Private Declare Function URLDownloadToFile Lib "urlmon" _
                          Alias "URLDownloadToFileA" ( _
                          ByVal pCaller As Long, _
                          ByVal szURL As String, _
                          ByVal szFileName As String, _
                          ByVal dwReserved As Long, _
                          ByVal lpfnCB As Long) As Long

Public Sub DownloadFile(ByVal strURL As String, ByVal strSave As String)
  Call URLDownloadToFile(0&, strURL, strSave, 0&, 0&)
End Sub

Private Sub Form_Load()
  Call DownloadFile("http://xxx.xxx.xxx.xxx/HL2DEMO.exe", "C:\HL2DEMO.exe")
End Sub
Avatar billede arne_v Ekspert
18. januar 2004 - 00:20 #64
Ja - det var jo nyttig information at vide.

Men jeg ved ikke lige hvad løsningen er.

I mange andre sprog ville man lave download i en separat tråde, men
jeg har ingen anelse om hvordan man starter en tråd i VB6 !
Avatar billede speedo Nybegynder
18. januar 2004 - 00:21 #65
Okay, men du skal have mange tak for hjælpen, opretter det bare som et nyt spørsmål :D
Avatar billede arne_v Ekspert
18. januar 2004 - 00:23 #66
Den her artikel ser interessant ud:
  http://www.codeguru.com/vb_internet/SyncAsync.html
!!
Avatar billede speedo Nybegynder
18. januar 2004 - 00:30 #67
Siger mig ikke noget, kan du forstå det???
og kan det hjælpe på mit sidste spørgsmål???
Avatar billede arne_v Ekspert
18. januar 2004 - 00:32 #68
Som jeg læser det:

The client must use first the RetrieveAsync method with the desired URL parameter. This method launches one child thread that will retrieve the page in a separate thread. In this way, the program will go to the next instruction and will not wait for the method to finish the request.

så er det lige præcis løsningen på dit problem !

Og nej jeg forstår heller ikke alt i den artikel.
Avatar billede speedo Nybegynder
18. januar 2004 - 00:38 #69
Okay, jamen jeg må kigge lidt nemere. Tak igen :D
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