VB.Net HttpWebRequest hergebruiken of niet

Pagina: 1
Acties:

Vraag


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 10-10 11:31
ik heb in VB.Net een botje geschreven om op een website in te loggen en wat data op te halen.

Nu heb ik een functie om een standaard webpagina op te halen incl cookies:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    Private Function RegularPage(ByVal URL As String, ByVal CookieJar As CookieContainer, ByVal Referer As String) As String
        Dim reader As StreamReader
        Dim Request As HttpWebRequest = HttpWebRequest.Create(URL)

        Request.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
        Request.AllowAutoRedirect = True
        Request.CookieContainer = CookieJar
        Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
        Request.Headers.Add("Cache-Control", "max-age=0")
        Request.Headers.Add("Accept-Language", "en-US,en;q=0.8")
        Request.ProtocolVersion = HttpVersion.Version11
        Request.KeepAlive = True
        Request.ContentType = "application/x-www-form-urlencoded"
        Request.AutomaticDecompression = DecompressionMethods.GZip
        Request.Referer = Referer
        Request.Headers.Add("Upgrade-Insecure-Requests", "1")


        Dim Response As HttpWebResponse = Request.GetResponse()
        reader = New StreamReader(Response.GetResponseStream())
        Return reader.ReadToEnd()
        reader.Close()        
        Response.Close()
    End Function


Nu heb ik ineens als ik na inloggen (andere functie voor) nog een pagina wil opvragen er een time-out optreed, echter NIET als ik Fiddler heb draaien. Deze uitleg gaat hier over:
http://www.telerik.com/bl...ing-fiddler-fixes-my-app-

Dit leert dat er kennelijk een maximum aantal aan het connecties is.
Doe ik het op deze manier goed, door de functie RegularPage aan te roepen. Of moet ik het HttpWebRequest buiten de functie houden en hergebruiken.
(Kan toch maar 1x Create aanroepen met een specifieke URL?)

Beste antwoord (via trekker22 op 25-02-2016 15:30)


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je doet de Return voor je 2 Close(). Resultaat moet je tijdelijk opslaan, dingen sluiten en resultaat returnen.

edit: Using gebruiken kan ook.

[ Voor 13% gewijzigd door Daos op 25-02-2016 15:26 ]

Alle reacties


  • boe2
  • Registratie: November 2002
  • Niet online

boe2

'-')/

Moet je CookieJar niet ByRef zijn ipv ByVal? De tweede request zal nooit de geupdate cookies gebruiken nu.

*edit* en de cookies ook uit de response plukken ofc.

[ Voor 21% gewijzigd door boe2 op 25-02-2016 14:34 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 10-10 11:31
boe2 schreef op donderdag 25 februari 2016 @ 14:32:
Moet je CookieJar niet ByRef zijn ipv ByVal? De tweede request zal nooit de geupdate cookies gebruiken nu.
Durf ik niet te zeggen, als ik met Fiddler kijken worden de cookies toch echt wel overgenomen!

Zie inderdaad dat ik bij de LoginFunctie wel ByRef gebruik. Even aanpassen.

Verder vind ik op StackOverflow dat steeds nieuwe HttpWebRequest eigenlijk geen probleem moet zijn?

"You simply use another HttpWebRequest object and provided that you set KeepAlive to true in both cases the internal HTTP connection manager in the .NET Framework should handle things for you. See the MSDN documentation for the KeepAlive property for more info on this."

Ik merk ook dat ook het inlog proces veel sneller/soepeler draait als ik Fiddler heb draaien. Doet me toch enigzins vermoeden dat er iets fout in de code zit?
Ik gebruik trouwen HttpWebRequest omdat ik dan meer opties heb qua Headers ten opzichte van gebruik van WebClient.

[ Voor 57% gewijzigd door trekker22 op 25-02-2016 14:47 ]


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je doet de Return voor je 2 Close(). Resultaat moet je tijdelijk opslaan, dingen sluiten en resultaat returnen.

edit: Using gebruiken kan ook.

[ Voor 13% gewijzigd door Daos op 25-02-2016 15:26 ]


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 10-10 11:31
Daos schreef op donderdag 25 februari 2016 @ 15:18:
Je doet de Return voor je 2 Close(). Resultaat moet je tijdelijk opslaan, dingen sluiten en resultaat returnen.

edit: Using gebruiken kan ook.
Zo hee dat heb ik ff over de kop gezien!

Inderdaad wordt die zo niet geclosed.... Stupid... Opgelost en thanks!

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

trekker22 schreef op donderdag 25 februari 2016 @ 15:31:
[...]

Zo hee dat heb ik ff over de kop gezien!

Inderdaad wordt die zo niet geclosed.... Stupid... Opgelost en thanks!
Als het goed is geeft Visual Studio gewoon een compiler warning over "Unreachable code detected" in je error window.

Misschien handig om je (overige) compile warnings even door te kijken :)

Death smiles at us all, all a man can do is smile back.
PSN


  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 10-10 11:31
Stond toch echt geen warning! Of is dat een bepaalde instelling dat sommige warnings genegeerd worden?

  • YakuzA
  • Registratie: Maart 2001
  • Niet online

YakuzA

Wat denk je nou zelluf hey :X

trekker22 schreef op donderdag 25 februari 2016 @ 16:59:
Stond toch echt geen warning! Of is dat een bepaalde instelling dat sommige warnings genegeerd worden?
Standaard zou deze te zien moeten zijn: https://msdn.microsoft.com/en-us/library/c0h4st1x.aspx

Death smiles at us all, all a man can do is smile back.
PSN

Pagina: 1