Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-24 18:55:57 - Thomas Roman, i forum visual basic - allmänt, Tråden har 6 Kommentarer och lästs av 490 personer

Jag försöker ladda ner en exe-fil med Inet-kontrollen, men det går inte så bra.
Det hade varit lätt om jag hade kunnat använda:

BArray() = Inet1.OpenURL(URL, icByteArray)

men jag måste skicka med en Referer-URL, så det går inte med OpenURL.

Nått tips på hur jag kan lösa det?


Thomas


Svara

Sv: Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-25 02:30:07 - Markus Jarderot

Du kan ju alltid använda winsock... bara att skicka en http-header
<code>
GET /sokvag/till_filen.exe HTTP/1.1
Host: www.dinsajt.com
Referer: http://vars.du.com/ifran.html

</code>
^--- dubbla radbrytningar i slutet
Sen tror jag inte de använder nån speciell kodnings-metod på binärfiler. Eventuellt gz-komprimering, men jag har själv aldrig sett det på nån server.
Först svarar servern med en egen header:
<code>
HTTP/1.1 200 OK
Server: Namnetpaservern 3.4.34.432
Enmassa: Andra headers

</code>
^-- dubbla radbrytningar igen, direkt följt av binärdatan.
Det är bara att skriva all data till filen allt eftersom det anländer med Winsock1_DataArrival-händelsen.
<code>
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Data() As Byte
Winsock1.GetData Data(), vbByte + vbArray
Put #1, , Data()
End Sub
</code>
Du får modifiera koden lite för att kompensera för headern i början.


Svara

Sv: Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-25 11:26:18 - Thomas Roman

Jag har använt winsock först men det är inte alltid det fungerar.
Ibland får jag med konstiga tecken... ser ut som hex-tal, typ "5f0".

Då tänkte jag vara bekväm och gå runt problemet med Inet-kontrollen, men det blev tydligen inte så mycket lättare.


Thomas


Svara

Sv: Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-25 16:08:02 - Thomas Roman

Hmm... nu ser jag iofs att din winsock-kod skiljer sig lite från min... ska ta och testa den...

Thomas


Svara

Sv: Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-25 22:39:34 - Thomas Roman

Jag har ett litet problem... hur får jag bort dom dubbla radbrytningarna och allt före när datan ligger i en array?

Thomas


Svara

Sv: Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-26 13:56:40 - Markus Jarderot

De flesta servrar skickar headern i ett eget paket.
Skulle kunna tänka mig det så här:
<code>
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Static HeaderComplete As Boolean
Dim Data() As Byte
Winsock1.GetData Data(), vbByte + vbArray
If HeaderComplete Then
Put #1, , Data()
Else
HeaderComplete = True
End If
End Sub
</code>
Fast det är nog att "fuska" lite.
En annan metod kan fungera så här:
<code>
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Static HeaderComplete As Boolean 'Static gör att variablen behåller sitt värde mellan anropen
Dim Data() As Byte
Winsock1.GetData Data(), vbByte + vbArray 'Hämta datan
If HeaderComplete Then 'Servern har redan skickat headern
Put #1, , Data() 'Skriv resterande data till filen
ElseIf Data(0) <> Asc("H") Then 'Första raden i headern börjar alltid med HTTP/1
'Inet sparar även datan om den inte innehåller en header
HeaderComplete = True
Put #1, , Data()
Else
For i = 0 To bytesTotal - 1 'Eftersom det är en byteArray så är det inte så praktiskt att använda InStr
If Data(i) = 13 Then 'Första tecknet i en radbrytning (CR(13) + LF(10))
If j = 0 Or j = 2 Then
j = j + 1 'j håller reda på hur många tecken som stämmer med CR+LF+CR+LF (2 radbrytningar)
Else 'Den hittade ett CR på felaktig position
j = 0 'nollställ j
End If
ElseIf Data(i) = 10 Then 'LF
If j = 1 Or j = 3 Then
j = j + 1
Else
j = 0
Else 'Hittade ett tecken förutom CR/LF
j = 0
End If
If j = 4 Then 'i står nu på sista tecknet i CRLF+CRLF
If i < bytesTotal - 1 Then 'Det finns data efter CRLF+CRLF
HeaderComplete = True
For k = 0 To bytesTotal - i - 1 'Flytta fram all data efter i till början av arrayn
Data(k) = Data(i + k)
Next k
ReDim Preserve Data(bytesTotal - i) 'Klipp bort de sista byte'en
Put #1, , Data()
End If
End If
Next i
End If
End Sub
</code>
Det går nog att förenkla koden på vissa ställen... jag har inte heller testkört koden, så det kan finnas en del fel.


Svara

Sv: Ladda ner binära filer med Inet-kontrollen

Postades av 2004-04-30 11:45:42 - Markus Jarderot

Här är en kortare version med string istället för byte-array
<code>
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim buffer As String, i As Integer
Winsock1.GetData buffer, vbString
If HeaderDone Then
Data = Data & buffer
Else
i = InStr(1, buffer, vbCrLf & vbCrLf)
If i > 0 Then
buffer = buffer & Mid(Data, i + 4)
HeaderDone = True
End If
End If
End Sub
</code>


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 699
27 958
271 741
817
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies