Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[VB.NET] Image downloaden met webbrowser component

Pagina: 1
Acties:

  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 14-11 09:45
Hoi,

Icm dit topic. wil ik een image downloaden en vervolgens doorlichten. Het doorlichten van de image lukt nu. Waar ik nu moeite mee heb is het downloaden van de image. Ik wil het liefst met de webbrowser control werken. Dit omdat daar al een keer mee ingelogd is en die dus de cookie beschikbaar heeft. Ik zat te denken aan:
Visual Basic:
1
2
webbrowser.navigate("http://voorbeeld.com/image.php?zonder_image_extensie")
webbrowser.ShowSaveAsDialog()

Deze werkt niet, hij geeft dan aan om het als .mht bestand op te slaan, en hierbij is er nog interactie met de gebruiker nodig, fout dus.
Visual Basic:
1
2
webbrowser.navigate("http://voorbeeld.com/image.php?met_image_extensie&.gif")
webbrowser.ShowSaveAsDialog()

Hierbij wil IE het wel als .bmp opslaan, maar dit is nog steeds niet automatisch! Ik weet dus niet hoe ik het moet automatiseren. Ik heb ook nog geprobeerd:
Visual Basic:
1
2
3
4
webbrowser.navigate("http://voorbeeld.com/image.php?met_image_extensie&.gif")
Dim objWriter As New System.IO.StreamWriter(C:\Image.bmp)
objWriter.Write(WebBrowser.DocumentText)
objWriter.Close()

En hier geeft hij aan dat hij aan: "out of memory".

Het hoeft niet per se met de webbrowser control, maar het moet wel met dezelfde cookie als die van de webbrowser. Iemand ideeën?

Misschien kan in hem uit de temp files vissen, is dat een idee?

[ Voor 51% gewijzigd door ikkuhqhp op 15-06-2008 13:51 ]


  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

..

[ Voor 100% gewijzigd door ? ? op 25-01-2013 09:51 ]


  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 14-11 09:45
maar hoe los ik het cookies probleem dan op?

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

HttpWebRequest heeft een CookieContainer. Uit de response kan je de cookies halen, en die bij de volgende request weer meesturen.

[ Voor 45% gewijzigd door AtleX op 15-06-2008 14:40 ]

Sole survivor of the Chicxulub asteroid impact.


  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 14-11 09:45
goed, ik heb eens gekeken en ik vind NIET hoe je met de HttpWebRequest waardes kunt POSTen. MSDN geeft hier aan hoe je met WebRequest kunt posten, maar daarmee kun je weer geen cookies opvangen (ik kan iig niet vinden hoe). Iemand anders wel?
--edit--
dit gevonden, even kijken!

Nee, ook hier weer geen POST.

[ Voor 22% gewijzigd door ikkuhqhp op 16-06-2008 21:23 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 19:49
HttpWebRequest erft over van WebRequest
http://msdn.microsoft.com...ttpwebrequest.method.aspx

Overige hints:
http://msdn.microsoft.com...brequest.getresponse.aspx
http://msdn.microsoft.com...pwebresponse.cookies.aspx

MSDN is je vriend

[ Voor 3% gewijzigd door Daspeed op 16-06-2008 21:27 ]


  • ikkuhqhp
  • Registratie: Oktober 2006
  • Laatst online: 14-11 09:45
Ja, ik had die dingen gelezen, maar ik kon er niks van maken.
maar ik was toch nog even verder gaan spelen en dit werkt:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.voorbeeld.com"), HttpWebRequest)
        request.CookieContainer = New CookieContainer()
        request.Method = "POST"
        Dim postData As String = "gebr_lgn=" & user.Text & "&ww_lgn=" & password.Text
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
        request.ContentType = "application/x-www-form-urlencoded"
        ' Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length
        ' Get the request stream.
        Dim dataStream As Stream = request.GetRequestStream()
        ' Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length)
        ' Close the Stream object.
        dataStream.Close()
        Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)


Nu moet ik nog even kijken hoe ik zorg dat de volgende request, om het plaatje te downloaden, de cookies ook nog meestuurt!

--edit--
ik snap het dus echt niet meer. Hoe zorg ik nou dat een volgende request ook weer dezelfde sessionid meestuurt?

--edit2--
dan maar zo:
Visual Basic:
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
    Private Sub imganalysis()
        Dim antirobot, refrobot As Bitmap
        Dim currentcolor, refcolor As Color
        Dim cookies_log, cookies_jat As New CookieContainer
        Dim request As HttpWebRequest = CType(WebRequest.Create("http://www.voorbeeld.com"), HttpWebRequest)
        request.CookieContainer = cookies_log
        request.Method = "POST"
        Dim postData As String = "gebr_lgn=" & user.Text & "&ww_lgn=" & password.Text
        Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)
        request.ContentType = "application/x-www-form-urlencoded"
        ' Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length
        ' Get the request stream.
        Dim dataStream As Stream = request.GetRequestStream()
        ' Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length)
        ' Close the Stream object.
        dataStream.Close()
        Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
        cookies_log.Add(response.Cookies)
        response.Close()

        Dim request2 As HttpWebRequest = CType(WebRequest.Create("http://www.voorbeeld.com/hoi.bmp"), HttpWebRequest)
        request2.CookieContainer = cookies_log
        Dim response2 As HttpWebResponse = CType(request2.GetResponse(), HttpWebResponse)
        Dim str As Stream = response2.GetResponseStream()
        Dim inBuf(100000) As Byte
        Dim bytesToRead As Integer = CInt(inBuf.Length)
        Dim bytesRead As Integer = 0
        While bytesToRead > 0
            Dim n As Integer = str.Read(inBuf, bytesRead, bytesToRead)
            If n = 0 Then
                Exit While
            End If
            bytesRead += n
            bytesToRead -= n
        End While
        Dim fstr As New FileStream("C:\anti.bmp", FileMode.OpenOrCreate, FileAccess.Write)
        fstr.Write(inBuf, 0, bytesRead)
        str.Close()
        fstr.Close()
        response2.Close()
End Sub


Ik heb nu dus 2 httpRequests, omdat ik niet kon bedenken hoe ik die eerste weer moest gebruiken!

[ Voor 51% gewijzigd door ikkuhqhp op 16-06-2008 22:25 ]


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Waarom gebruik je een (Http)WebRequest object en niet het veel eenvoudigere WebClient object welke al een ingebouwde post functie heeft?

http://msdn.microsoft.com...system.net.webclient.aspx. Deze class wrapped de HttpWebRequest en HttpWebResponse classes. Je kunt dan ook veel eenvoudiger meerdere requests naar een server maken..

If it isn't broken, fix it until it is..


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 19:49
Volgens mij is daar de cookie afhandeling wat lastiger ivm ontbreken cookiecontainer, maar dat kan ik verkeerd hebben.

  • sig69
  • Registratie: Mei 2002
  • Nu online
Hier staan ook wel wat nuttige replies over WebRequests en cookies etc in: \[VB.NET] Wachten tot url is geladen

Roomba E5 te koop

Pagina: 1