[VB6] Bestand downloaden van webserver

Pagina: 1
Acties:

  • iznogood
  • Registratie: September 2001
  • Niet online
Ik verstuur het volgende naar de webserver :
code:
1
2
3
4
5
strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf
strCommand = strCommand + "Accept: */*" + vbCrLf
strCommand = strCommand + vbCrLf

Sock(Index).SendData strCommand


Dit krijg ik terug van de webserver en sla ik op in een bestand:
code:
1
2
3
4
5
6
7
8
9
10
11
HTTP/1.1 200 OK
Date: Sat, 04 Feb 2006 11:32:09 GMT
Server: Apache/2.0.40 (Red Hat Linux)
Last-Modified: Tue, 12 Apr 2005 11:27:10 GMT
ETag: "cba5f7-9016-92c2bf80"
Accept-Ranges: bytes
Content-Length: 36886
Connection: close
Content-Type: image/gif

GIF89Binaire data enz


Hoe kan ik ervoor zorgen dat de Header niet opgeslagen wordt in het bestand, maar alleen de binaire data die ik binnenkrijg?

Zowel op google als op de search niks gevonden. De Headers die ik binnenkrijg zijn variabel. Iemand een idee?

Just as Good


  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 07:52
Zit die wit-regel er altijd in? Anders kan je gewoon beginnen nadat je die witregel hebt gehad.
Een andere manier is om te scannen in de regel of er een bekend keyword van je header in voorkomt. Als dat zo is, sla je deze regel over.

  • iznogood
  • Registratie: September 2001
  • Niet online
BestTested! schreef op zaterdag 04 februari 2006 @ 13:32:
Zit die wit-regel er altijd in? Anders kan je gewoon beginnen nadat je die witregel hebt gehad.
Een andere manier is om te scannen in de regel of er een bekend keyword van je header in voorkomt. Als dat zo is, sla je deze regel over.
Van die witregel ga ik nakijken.Op keyword gaat niet omdat verschillende servers de headers verschillend presenteren.

Edit:
Ik heb de header (gekeken of "HTTP" in de header voorkwam) eruit gekregen en heb nu alleen nog maar binary data in het bestand staan. Op een of andere manier werkt het gedownloade bestand nog steeds niet niet. Zou ik iets over het hoofd gezien kunnen hebben.

Edit2:
Het lijkt erop dat niet het hele bestand gedownload wordt als ik kijk naar de grootte die ik via VB6 binnenhaal en de originele grote van het bestand. Dit is mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Sub Sock_Connect(Index As Integer)
Dim strCommand As String
Dim strWebPage As String

strWebPage = FrmMain.OriginalPictureLinks.List(LstCounter + Index)

strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf
strCommand = strCommand + "Accept: */*" + vbCrLf
strCommand = strCommand + vbCrLf

Sock(Index).SendData strCommand

End Sub

Private Sub Sock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim webData As String

On Error Resume Next
Sock(Index).GetData webData, vbString

Debug.Print Len(webData), Sock(Index).State, Index
If Len(webData) > 0 And Left$(webData, 4) <> "HTTP" Then
    If Index = 0 Then Put #1, , webData
End If
End Sub

Private Sub Sock_Close(Index As Integer)
On Error Resume Next
If Index = 0 Then
    Close #1
    If CurrPicRow = 1 Then FrmMain.Imag(Index) = LoadPicture(App.Path & "\" & Trim$(Str$(Index)) & ".jpg")
    If CurrPicRow = 2 Then FrmMain.Imag(Index + 8) = LoadPicture(App.Path & "\" & Trim$(Str$(Index)) & ".jpg")
    LsCounter = LstCounter + 1
End If
End Sub

[ Voor 70% gewijzigd door iznogood op 04-02-2006 14:02 ]

Just as Good


Verwijderd

Hoe sla je de data op? Als je namelijk Winsock.getdata vbString gebruikt, dan zul je stringdata krijgen en geen binary data. Dus je zult:

code:
1
2
3
4
5
DataArrival functie:

Dim rcvbuf() as Byte 
ReDim rcvbuf(bytesTotal) 
Winsock1.GetData rcvbuf, vbByte + vbArray, bytesTotal


moeten gebruiken om je response in te lezen, en vervolgens binary file access moeten gebruiken om het weg te schrijven:

code:
1
2
3
4
intFile = FreeFile
Open "c:\temp\newFile.jpg" For Binary Access Write As #intFile  
Put #intFile, , rcvbuf()  
Close #intFile

[ Voor 3% gewijzigd door Verwijderd op 04-02-2006 14:01 ]


  • iznogood
  • Registratie: September 2001
  • Niet online
Verwijderd schreef op zaterdag 04 februari 2006 @ 14:01:
Hoe sla je de data op? Als je namelijk Winsock.getdata vbString gebruikt, dan zul je stringdata krijgen en geen binary data. Dus je zult:

code:
1
2
3
4
5
DataArrival functie:

Dim rcvbuf() as Byte 
ReDim rcvbuf(bytesTotal) 
Winsock1.GetData rcvbuf, vbByte + vbArray, bytesTotal


moeten gebruiken om je response in te lezen, en vervolgens binary file access moeten gebruiken om het weg te schrijven:

code:
1
2
3
4
intFile = FreeFile
Open "c:\temp\newFile.jpg" For Binary Access Write As #intFile  
Put #intFile, , rcvbuf()  
Close #intFile
Ik krijg op deze: Sock(Index).GetData RcvBuf, vbByte + vbArray, BTotal regel een foutmelding "Unsupported variant types".

[ Voor 77% gewijzigd door iznogood op 04-02-2006 14:46 ]

Just as Good


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

HTTP heeft de eigenschap dat de header alles is VOOR de witregel en de data alles NA de witregel.

sla dus alles op wat na die witregel komt en je hebt de inhoud van het bestand.

ASSUME makes an ASS out of U and ME

Pagina: 1