Этот вопрос относится к использованию производного класса WebClient с поддержкой cookie, представленного в Как я могу заставить WebClient использовать Cookies? вопрос.
Я бы хотел использовать ListBox для ...
1) отображать каждый файл cookie в отдельности как «ключ = значение» (цикл «Для каждого» отображает их все как одну строку), а
2) иметь возможность отображать все файлы cookie независимо от домена, с которого они пришли («www.google.com», здесь):
Imports System.IO
Imports System.Net
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim webClient As New CookieAwareWebClient
Const URL = "http://www.google.com"
Dim response As String
response = webClient.DownloadString(URL)
RichTextBox1.Text = response
'How to display cookies as key/value in ListBox?
'PREF=ID=5e770c1a9f279d5f:TM=1274032511:LM=1274032511:S=1RDPaKJKpoMT9T54
For Each mycc In webClient.cc.GetCookies(New Uri(URL))
ListBox1.Items.Add(mycc.ToString)
Next
End Sub
End Class
Public Class CookieAwareWebClient
Inherits WebClient
Public cc As New CookieContainer()
Private lastPage As String
Protected Overrides Function GetWebRequest(ByVal address As System.Uri) As System.Net.WebRequest
Dim R = MyBase.GetWebRequest(address)
If TypeOf R Is HttpWebRequest Then
With DirectCast(R, HttpWebRequest)
.CookieContainer = cc
If Not lastPage Is Nothing Then
.Referer = lastPage
End If
End With
End If
lastPage = address.ToString()
Return R
End Function
End Class
Спасибо.
Редактировать: С помощью приведенного ниже кода я по-прежнему получаю однострочный ключ = значение вместо отдельных пар ключ = значение, которые мне нужно отобразить:
'How to display cookies as key=value in ListBox?
'still displayed as key=PREF value=ID=c1c024db87787437:TM=1274083167:LM=1274083167:S=ZsG7BXqbCe7yVgJY
Dim mycookiecollection As CookieCollection
mycookiecollection = webClient.cc.GetCookies(New Uri(URL))
Dim mycookie As Cookie
For Each mycookie In mycookiecollection
ListBox1.Items.Add(mycookie.Name & vbTab & mycookie.Value)
'MessageBox.Show(mycookie.Name & vbTab & mycookie.Value)
Next
Редактировать: Оказывается, Google вернул один файл cookie с ключом = PREF и значением = объединением нескольких элементов ключ = значение.
Для тех, кто заинтересован, вот некоторый код для разбора части значения:
For Each ck As Cookie In cookies
Dim ht As New Web.HttpCookie(ck.Name, ck.Value.Replace(":", "&"))
If ht.HasKeys Then
Debug.WriteLine(ht.Name)
For Each key In ht.Values.AllKeys
Debug.WriteLine(vbTab & key & vbTab & ht.Values(key))
Next
Else
Debug.WriteLine(ht.Name & vbTab & ht.Value)
End If
Next