[VB6] Header bij uploaden bestanden

Pagina: 1
Acties:
  • 293 views sinds 30-01-2008
  • Reageer

  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
Hoi! Ik ben bezig met een programma'tje om meerdere bestanden achter elkaar te kunnen uploaden, ik zit echter met een probleem.

Na het lang zoeken en uitspitten heb ik aanwijzingen gevonden voor het uploaden van een bestand met een Inet-object.
Het is me al gelukt om het Inet object gewoon te gebruiken voor het posten van standaard-variables, maar nu lukt het me niet de post zo te krijgen, dat zowel het bestand als enkele variabelen doorkomen.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Sub UploadFile()
    Dim strURL As String
    Dim strFile As String
    Dim StrFileName As String
    
    Dim strHeader As String
    Dim strBody As String
    Dim aPostBody() As Byte
    Dim nFile As Integer
            
    'strURL = "http://www.onlinealbum.nl/standalone_upload/upload.php"
    strURL = "http://192.168.0.1/upload.php"
    
    ' Get the file name
    StrFileName = lstFotos.List(Int(lngCurrentFoto)) 'lngCurrentFoto is een global
    
    ' Grab the file
    nFile = FreeFile
    Open StrFileName For Binary As #nFile
        strFile = String(LOF(nFile), " ")
    Get #nFile, , strFile
    Close #nFile

    ' Assemble an HTTP request.
    
    'Converteer naar Unicode
    strFile = StrConv(strFile, vbFromUnicode)
    
    ' Maak de header aan
    strHeader = "Content-Type: multipart/form-data; boundary=Xu02=$" & vbCrLf & _
                "Content-Disposition: form-data; name=files;"
    ' Maak de body aan
    strBody = "username=" & Base64Encode(txtUsername.Text) & "" & _
                "password=" & Base64Encode(txtPassword.Text) & ";" & _
                "size=" & Str(FileLen(StrFileName)) & ";" & _
                "userfile=" & StrFileName & vbCrLf & _
                "--Xu02=$" & vbCrLf & _
                    strFile & vbCrLf & _
                "--Xu02=$--"
    
    PostData uploadControl, "http://www.onlinealbum.nl/standalone_upload/upload.php", strBody, strHeader

End Sub

Public Sub PostData(InetControl, strURL As String, strPostString, Optional strHeader As String)
    If strHeader = "" Then
        strHeader = "Content-type: application/x-www-form-urlencoded" & vbCrLf
    End If
    InetControl.Execute InetControl.URL, "POST", strPostString & "", strHeader
End Sub


Een paar verklaringen:
- Ik heb al veel zitten schuiven, omdat ik al vaak de draad kwijt ben geweest. Deze structuur leek me eigenlijk het meest logisch
- Ik las dat ik moest converteren naar Unicode, weet iemand precies waarom, en of ik dit goed doe?
- Wat is de juist volgorde van de headers?
- Of: Hoe ziet een 'echte' request/post eruit van een upload-script? Normaal gesproken doet Internet Exlporer al het werk voor je, ik moet dit zelf doen.
- Mijn PHP-script ziet geen enkele geposte value
- Laat staan dat het script mijn bestand herkent :)
- Wat is precies het verschil tussen de header en de post-string? En hoe plaats ik deze?

Ik heb dit gevonden als meest heldere verklaring van hoe zo'n header eruit moet zien:
The following is an example of the use of the `attachment'
disposition with a multipart body part. The user should see text-
part-1 immediately, then take some action to view multipart-2. After
taking action to view multipart-2, the user will see text-part-2
right away, and be required to take action to view jpeg-1. Subparts
are indented for clarity; they would not be so indented in a real
message.

Content-Type: multipart/mixed; boundary=outer
Content-Description: multipart-1

--outer
Content-Type: text/plain
Content-Disposition: inline
Content-Description: text-part-1

Some text goes here

--outer
Content-Type: multipart/mixed; boundary=inner
Content-Disposition: attachment
Content-Description: multipart-2

--inner
Content-Type: text/plain
Content-Disposition: inline
Content-Description: text-part-2

Some more text here.

--inner
Content-Type: image/jpeg
Content-Disposition: attachment
Content-Description: jpeg-1

<jpeg data>
--inner--
--outer--
http://www.faqs.org/rfcs/rfc2183.html

Wie o wie helpt mij verder, want ik begin vast te zitten.

[ Voor 7% gewijzigd door looskuh op 02-07-2004 21:47 ]


  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
Voorbeeld van wat er als strBody wordt verstuurd (voor een heel kleine jpg):
username=bG9vc2t1aA==password=b3BlbiBkb29y;size= 997;userfile=D:\Mijn documenten\TEST.JPG
--Xu02=$
?????Aa?? ???????????????????“??????????????RÛN??????R???????????????????????????8???d?!ÄAaaa A^??????A~???AŽ^??L?????????????????????????????????????????????????????????????????????????????Äg`aaaa A^??????A?¯???w?????????????????????????????????????????????????????????????????????????????????Ú???????????????????????????????????????????????????????????????????f???????????????????????????????t??????????????????????????????????????????????????????????????????????????????????????????S?????? ?????
(Hmmm, waarom komt er geen
--Xu02=$-- achter?)

  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 23-05 20:37
Ik kan helaas niet direct aanwoord geven op je vraag. Waar je misschien iets aan hebt is om een (http-)packter sniffer te gebruiken.

Dit gebruik ik zelf ook als ik meer informatie nodig heb over hoe een protocol werkt. Op http://www.download.com zal je er wel enkele vinden.

Je kan alle data zien wanneer je een bestand upload, en dan de verschillen zoeken met jouw code.

Succes.

  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
Dankjewel voor de tip. Ik heb het programma gedownload en het geprobeerd. Het geeft me wat meer inzicht in hoe het een en ander werkt.

Maar helaas heeft het me nog geen oplossing gegeven. Het programma geeft slechts weer welke header er gepost is, en welk antwoord er is gegeven. Maar niet de data die daadwerkelijk over de lijn gaat.

[ Voor 72% gewijzigd door looskuh op 03-07-2004 18:01 ]


  • looskuh
  • Registratie: Februari 2000
  • Laatst online: 07-12-2024
YES!!!! Ik ben er uit na uren ploeteren en vergelijken :D:D:D! (Wat kan proggen toch mooi zijn :))

Even de oplossing, mocht iemand dit probleem ooit nog tegenkomen:
-Ik heb met het prachtige progje EtherDetect alle HTTP-packets nagezocht. Uiteindelijk blijkt een voorbeeld van een HTTP-post dit te zijn:

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
VAN TEST FORMULIER

POST /upload.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Referer: http://192.168.0.1/upload_form.html
Accept-Language: nl
Content-Type: multipart/form-data; boundary=---------------------------7d41e4c30174
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: 192.168.0.1
Content-Length: 1365
Connection: Keep-Alive
Cache-Control: no-cache
---------------------------7d41e4c30174
-----------------------------7d41e4c30174
Content-Disposition: form-data; name="userfile"; filename="D:\Mijn documenten\1.jpg"
Content-Type: image/pjpeg

ÿØÿà..JFIF.....,.,..ÿÀ.........".......ÿÛ.&#8222;..................ETCETERA
ETCETERAx&#732;ºÐ«šd&#8482;^7.¥&#710;&#8226;.U&#821
1;..&#8226;.>..&curren;°ø.6..£.iW.V·ÿÙ
-----------------------------7d41e4c30174
Content-Disposition: form-data; name="username"

usernamewaarde
-----------------------------7d41e4c30174
Content-Disposition: form-data; name="password"

passwordwaarde
-----------------------------7d41e4c30174
Content-Disposition: form-data; name="size"

sizewaarde
-----------------------------7d41e4c30174--


Meerdere valkuilen heb ik genomen, maar uiteindelijk zat de grootste truc in de boundary. Het lijkt op het eerste gezicht alsof de boundary hier:
Content-Type: multipart/form-data; boundary=---------------------------7d41e4c30174
Hetzelfde is als deze boundary:
-----------------------------7d41e4c30174


Maar je ziet het pas als je ze onder elkaar zet:
---------------------------7d41e4c30174
-----------------------------7d41e4c30174

De boundary die daadwerkelijk de velden scheidt heeft MIME-commentaartekens ervoor, dus --

Vergeet ook niet de -- op het einde van de laatste boundary.

Die HTTP danwel Ethernet-sniffer hielp enorm. Dankjewel voor de tip!

offtopic:
En voor een eventuele engelse googlebezoeker, want het is vrijwel nergens te vinden op dit godvergeten internet: php visual basic upload vb binary http inet control api

[/offtopic]

[ Voor 13% gewijzigd door looskuh op 03-07-2004 18:14 ]


  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 23-05 20:37
looskuh schreef op 03 juli 2004 @ 18:13:

Maar je ziet het pas als je ze onder elkaar zet:
---------------------------7d41e4c30174
-----------------------------7d41e4c30174

De boundary die daadwerkelijk de velden scheidt heeft MIME-commentaartekens ervoor, dus --

Vergeet ook niet de -- op het einde van de laatste boundary.

Die HTTP danwel Ethernet-sniffer hielp enorm. Dankjewel voor de tip!
Graag gedaan hoor. Wel echt een rot iets om te vinden.. net die -- die daarvoor staan.
Pagina: 1