CookieWebClient.vb 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. Imports System.Net
  2. Public Class CookieWebClient
  3. Inherits WebClient
  4. Public Sub New(container As CookieContainer, Headers As Dictionary(Of String, String))
  5. Me.New(container)
  6. For Each keyVal In Headers
  7. Me.Headers(keyVal.Key) = keyVal.Value
  8. Next
  9. End Sub
  10. Public Sub New()
  11. Me.New(New CookieContainer())
  12. End Sub
  13. Public Sub New(container As CookieContainer)
  14. Me.container = container
  15. End Sub
  16. Private Shadows ReadOnly container As New CookieContainer()
  17. ''' <summary>
  18. ''' 以毫秒为单位的超时。
  19. ''' </summary>
  20. Public Timeout As Integer = 600000
  21. Protected Overrides Function GetWebRequest(address As Uri) As WebRequest
  22. Dim r As WebRequest = MyBase.GetWebRequest(address)
  23. Dim request = TryCast(r, HttpWebRequest)
  24. If request IsNot Nothing Then
  25. request.CookieContainer = container
  26. request.Timeout = Timeout
  27. End If
  28. Return r
  29. End Function
  30. Protected Overrides Function GetWebResponse(request As WebRequest, result As IAsyncResult) As WebResponse
  31. Dim response As WebResponse = MyBase.GetWebResponse(request, result)
  32. ReadCookies(response)
  33. Return response
  34. End Function
  35. Protected Overrides Function GetWebResponse(request As WebRequest) As WebResponse
  36. Dim response As WebResponse = MyBase.GetWebResponse(request)
  37. ReadCookies(response)
  38. Return response
  39. End Function
  40. Private Sub ReadCookies(r As WebResponse)
  41. Dim response = TryCast(r, HttpWebResponse)
  42. If response IsNot Nothing Then
  43. Dim cookies As CookieCollection = response.Cookies
  44. container.Add(cookies)
  45. End If
  46. End Sub
  47. End Class