Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 17:49

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[VB.NET] MultiPart-HttpWebRequest (Upload)

Discussion on [VB.NET] MultiPart-HttpWebRequest (Upload) within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
[VB.NET] MultiPart-HttpWebRequest (Upload)

Hier mal ein kleines Beispiel wie man mit HttpWebRequest eine Datei hochladen kann, in diesem Fall ein Bild auf epvpimg.com.

Vom Prinzip her funktioniert ein MultiPart Request eigentlich genauso wie ein normaler Request auch, man muss einfach den Post-String, welches im LiveHttpHeaders angezeigt wird, nachbilden.

Da ich hier: bereits ein Tutorial über WebRequest erstellt habe, werde ich in diesem Thread nicht mehr so genau darauf eingehen und alles detailiert erklären.

Die Funktion für einen Upload könnte z.B. so aussehen:

PHP Code:
Public Function GetUploadResponse(ByVal url As StringByVal upload As UploadData) As String
     Dim boundary 
As String Guid.NewGuid().ToString().Replace("-""")
     
Dim request As HttpWebRequest CType(HttpWebRequest.Create(url), HttpWebRequest)
     
request.Method "POST"
     
request.ContentType "multipart/form-data; boundary=" boundary
     request
.UserAgent "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"

     
Dim PostData As New MemoryStream
     With 
New StreamWriter(PostData)
          .
Write(("--" boundary) & vbNewLine)
          .
Write("Content-Disposition: form-data; name=""{0}""; filename=""{1}""{2}"upload.FieldNameupload.FileNamevbNewLine)
          .
Write(("Content-Type: " GetContentType(upload.FileName) & vbNewLine) & vbNewLine)
          .
Flush()
          .
Write(vbNewLine)
          .
Write("--{0}--{1}"boundaryvbNewLine)
          
PostData.Write(upload.Content0upload.Content.Length)
          .
Flush()
     
End With

     request
.ContentLength PostData.Length
     Using s 
As Stream request.GetRequestStream()
          
PostData.WriteTo(s)
          
End Using
     PostData
.Close()

     Return New 
StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd()
End Function 
"UploadData" ist lediglich eine kleine Struktur, die unsere nötigen Werte enthält:

PHP Code:
Structure UploadData
     Dim Fieldname 
As String
     Dim Filename 
As String
     Dim Content 
As Byte()

     Public 
Sub New(ByVal fieldname As StringByVal filename As StringByVal content As Byte())
          
Me.Fieldname fieldname
          Me
.Filename filename
          Me
.Content content
     End Sub
End Structure 
Und dann noch die kleine Funktion "GetContentType", die für uns überprüft, welche Dateiendung unser Bild hat und dementsprechend den nötigen Wert für unseren Request zurückgibt:

PHP Code:
Public Function GetContentType(ByVal path As String) As String
     Select 
Case New FileInfo(Path).Extension.ToLower()
          Case 
".bmp"
               
Return "image/bmp"
          
Case ".gif"
               
Return "image/gif"
          
Case ".jpe"".jpeg"".jpg"
               
Return "image/jpeg"
          
Case ".png"
               
Return "image/png"
          
Case ".svg"
               
Return "image/svg+xml"
          
Case ".tif"".tiff"
               
Return "image/tiff"
          
Case Else
               Return 
"application/octet-stream"
     
End Select
End 
Function 
So, das einzige was wir nun noch brauchen ist unser Post-String. Dazu einfach wie im 1. Tutorial bereits erklärt, LiveHttpHeaders öffnen und ein Bild hochladen, Ergebnis:


Unsere Anfrage wird also an geschickt.
Die nötigen Werte für den Post-String sind:

-----------------------------114782935826962
Dies wird automatisch in der GetUploadResponse-Funktion generiert (unsere "boundary"-Variable).

Content-Disposition: form-data; name="files[]"; filename="b.jpg"
files[] -> Fieldname (in unserer UploadData-Struktur)
b.jpg -> Filename (in unserer UploadData-Struktur)

Content-Type: image/jpeg
Dies erledigt unsere GetContentType-Funktion.

So, demnach würde unser Request folgendermaßen aussehen:

PHP Code:
//Beim Klick auf einen Button oder sonst was...
With New Http
     Dim upload 
As New Http.UploadData("files[]""PfadZumBild"File.ReadAllBytes("PfadZumBild"))
     
Dim html As String = .GetUploadResponse("http://epvpimg.com/upload/"upload)
End With 
Sollte unser Upload nun erfolgreich gewesen sein, so bekommen wir als Antwort folgendes (in der "html" Variable):

Quote:
"[{"name":"b.jpg","size":35200,"type":"image\/jpeg","url":"http:\/\/epvpimg.com\/U9zFd","thumbnail_url":"http:\/\/i.epvpimg.com\/U9zFd.jpg","alphaid":"U9zFd","extension":".jpg"}]"
Nun können wir z.B. ganz einfach mit der Split-Funktion (gibt natürlich auch andere Möglichkeiten) den Wert für "alphaid" auslesen und schon haben wir den Link zum Bild:

PHP Code:
Dim alphaid As String html.Substring(html.IndexOf("alphaid")).Split(""""c)(2)
//alphaid hat nun den Wert U9zFd
//daraus bilden wir nun den Link
Dim url As String "http://epvpimg.com/" alphaid 
Ja, das war's eigentlich auch schon, im Anhang findet ihr noch ein kleines Beispielprojekt:




Hoffe ich konnte damit einigen weiterhelfen.

Kraizy
Attached Files
File Type: rar EpvpImg_Upload.rar (124.3 KB, 172 views)
Kraizy​ is offline  
Thanks
17 Users
Old 10/19/2012, 18:56   #2



 
Shawak's Avatar
 
elite*gold: 0
The Black Market: 259/0/0
Join Date: Apr 2010
Posts: 10,289
Received Thanks: 3,613
Schönes Tutorial, gut erklärt.
Shawak is offline  
Thanks
1 User
Old 10/19/2012, 19:26   #3
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
Danke
Kraizy​ is offline  
Old 10/29/2012, 23:50   #4
 
elite*gold: 0
Join Date: Oct 2012
Posts: 6
Received Thanks: 2
great tutorial, I will try this out sometime
hound1 is offline  
Thanks
1 User
Old 10/30/2012, 19:18   #5
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
Have fun :P
Kraizy​ is offline  
Old 11/02/2012, 19:07   #6
 
'xLeatz.'s Avatar
 
elite*gold: 0
Join Date: Nov 2011
Posts: 5,477
Received Thanks: 742
Gute Fortsetzung des anderen Tutorials.
'xLeatz. is offline  
Thanks
1 User
Old 11/03/2012, 11:57   #7
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
Danke
Kraizy​ is offline  
Old 11/03/2012, 13:59   #8
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
Mir persöhnlich zwar nichts neues aber wirklich mal ein schönes und vorallem ECHTES tutorial und kein "hier ist der code, gebt mir ein thanks"-Thread
Danke dafür.
tolio is offline  
Thanks
3 Users
Old 11/14/2012, 15:28   #9
 
elite*gold: 0
Join Date: Aug 2012
Posts: 20
Received Thanks: 0
Gut erklärt und werde ich mir mal genauer anschauen
TheUltratester123 is offline  
Old 10/24/2013, 20:16   #10

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
Gutes Tutorial, ich hab allerdings eine Frage, und zwar möchte ich einen Post senden und eine Datei hochladen, also eine Mischung aus beiden Tutorials eine HTML form würde so aussehen:
<form action="http://domain.tld/post.php"
method="post"
enctype="multipart/form-data">
<input type="text" name="username" value="">
<input type="password" name="password" value="">
<input type="file" name="file">
</form>

Ich weiß allerdings nicht wie ich das in VB realisieren kann eigentlich müsste es so sein wie in diesem Tutorial bloß man muss noch den Post hinzufügen, aber irgendwie weiß ich nicht wo
EvolutionClip is offline  
Old 10/24/2013, 20:30   #11
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
eine datei hochladen ist ein post
schau dir das erste bild an, da sieht mans in livehttpheaders
du musst halt zusätzliche felder einfach entsprechend anhängen
tolio is offline  
Old 10/24/2013, 20:40   #12

 
elite*gold: 732
The Black Market: 191/0/1
Join Date: Mar 2013
Posts: 1,669
Received Thanks: 403
Quote:
Originally Posted by tolio View Post
eine datei hochladen ist ein post
schau dir das erste bild an, da sieht mans in livehttpheaders
du musst halt zusätzliche felder einfach entsprechend anhängen
Ja, soweit ist mir das klar ich habe jetzt allerdings das Problem/bzw verstehe nicht ganz, wie ich es machen soll. ich hab mit das mal in HTTP live header angeschaut(meine Version) seiht so aus
Code:
DNT: 1
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------10778313689980
Content-Length: 4875
-----------------------------10778313689980
Content-Disposition: form-data; name="username"

123
-----------------------------10778313689980
Content-Disposition: form-data; name="password"

456
-----------------------------10778313689980
Content-Disposition: form-data; name="captchafile"; filename="captcha_display.png"
Content-Type: image/png

PNG//HIER DAS BILD

und der Content-Type ist jetzt multipart, das verwirt mich ein bisschen
EvolutionClip is offline  
Old 10/24/2013, 21:23   #13
 
tolio's Avatar
 
elite*gold: 2932
The Black Market: 169/1/0
Join Date: Oct 2009
Posts: 6,966
Received Thanks: 1,097
sieht doch oben im thread ganz genau so aus, ist auch nen multipart request, steht sogar im thread titel
tolio is offline  
Old 12/04/2013, 07:00   #14
 
elite*gold: 75
The Black Market: 125/0/5
Join Date: Nov 2012
Posts: 2,454
Received Thanks: 321
Mir gefällt das Tutorial
ҳc3ρ0™ is offline  
Reply


Similar Threads Similar Threads
HttpWebRequest C# Browsergame Bot
12/07/2017 - .NET Languages - 4 Replies
Hi, i have the following problem and it would be great if s.o. could help me. I try to write a simple bot for a browsergame which uses the HttpWebRequest and Response classes from C#. Currently i try to log in with the following script but i only get back to the login page. When i try to catch a site for logged in members only i also only get the login page. There has to be a problem with the cookie but i don't know where :( class HttpHelper { private CookieContainer...
c# httpwebrequest Travian
12/07/2017 - .NET Languages - 2 Replies
Gude Leute ich hätt da mal ein anliegen ich will mir ein kleines Tool zur vereinfachten bedinung von Travian schreiben nur leider bekomme ich das irgendwie nicht auf die Reihe. da mein Code nicht so recht funktioniert hat habe ich mir den code von jemand anderes mal geklaut aber der ergibt das gleiche problem. Das Probleme ist er zeigt die Seite nicht richtig an und er baut keine truppen wenn ich auf Button1 click. wenn mir einer das vielleicht mal flicken könnte oder mir erklären...
[VB] HttpWebRequest Problem -.-
02/02/2012 - .NET Languages - 1 Replies
Hallo liebe Elitepvpers User, ich habe leider folgendes Problem: Ich möchte von dem Spam Email Anbieter "yopmail.com" meine Emails auslesen. Dazu muss ich mich auf der Webseite einfach mit "test" Anmelden Hierzu der HTTP Header : Siehe Anhang accname = Account Name im Beispiel "test"
[Projekt] MineTube ~ Video Upload/Bilder Upload und mehr! Team Gesucht
03/23/2011 - Minecraft - 21 Replies
Hallo, Da ich nun seit längerem in der Minecraft Section unterwegs bin und auch so schon lange Erfahrung mit dem Spiel gemacht habe, bin ich zum Entschluss gekommen ein neues Projekt zu starten. Doch was für ein Projekt? Es geht darum, dass viele Minecraft Player, mit Lets Play, Shows und Tutorials anfangen. Dies finde ich natürlich super, aber wieso sollte alles in YouTube un CO untergehen (ausgenommen Gronkh ;) ). Nun gehe ich dazu über, das Projekt namens MineTube zu starten. Was...



All times are GMT +1. The time now is 17:50.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.