VB.NET - [HTTP POST] Response.Cookies只返回第一个cookie值

时间:2013-10-06 20:16:11

标签: .net vb.net cookies

我正在使用以下代码循环访问响应cookie并将其保存在cookiejar中。

    For Each tempCookie As Cookie In Response.Cookies
        CookieJar.Add(tempCookie)
        MsgBox(tempCookie.ToString)
    Next

碰巧它只返回一个cookie,第一个(只在for中运行一次):

 PAGE_VIS=A|186.213.98.144|1381089446.485193|

Response.Cookies上只有一个cookie,但Response.Headers拥有所有cookie。

我如何从Response.Headers解析它们并添加on cookiecontainer以便以后使用它们? Response.Headers中的cookie位于:

Set-Cookie: PAGE_VIS=A|186.213.98.144|1381089446.485193|; domain=PAGE; path=/; expires=Mon, 07-Oct-2013 06:00:00 GMT,CSASF=;Version=1;Domain=PAGE;Path=/;Max-Age=7776000,CSAPAGES=ekpEOWluWTZSMXpDSWRMMm8wWWZ3UT09|5749|kNm6h4hlOB4SwLFg2gOIMXXpmTXDD5tnvB/dJ7AS3mUqUiLtpHLxzsWjfKsI1rcq6fp/DKre3QHAZHPQi968iw==;Version=1;Domain=PAGE;Path=/;Max-Age=7776000;HttpOnly,NAM_LOGIN_DEFAULT=user;Version=1;Domain=PAGE;Path=/;Max-Age=129600,UPL09=2-25|39|54|56|58|90|91|105|106|156|182|212|218|219|242|245|248|284|285|480|1222;Version=1;Domain=PAGE;Path=/;Max-Age=2592000,PAGE_OTR=;Version=1;Domain=PAGE;Path=/;Max-Age=2592000,CAUBR01=5eeOUuDdqyj+ILCQ7oOg71yXEgIGi2KJ7bjDiTt27tTXgjT7jqC49eGprgjZ+8rQ7O7mqG/qEq28u4EXAiEbfE0qqI9QqUrj27LrEAi4kSZacSSTAo5YY+yQZYFr4qGgCp18odS/Y92mkEtqEuCoxuG+qsK5fhOJmKQqqpxqE07ORqEn2JGEhOHVmoQqqKCqEq78+2EMqtKZlrvMqv2qmKMqEqqOIqZ72NKGRxO2mKeskKwkZq2CH7GrC+GGoKOCqOVmqEOqEkbr82EjqcGKVHoQqn2qkEMqKk2xLqEk20EEtSr2qo2kqErqEqqODqZh7YKGtxK2mCesmEMsGqVSTMZb24EKuMrTqw2qqEoqEqqK92ZUMnKZsOKqmo2kqEOkEq2KzqKpVvKZlOCMqo7qqGMmKq2oMeEiMXGZBKMqqOQqqKxqZsqv2VK32tEG+Cr7kH2qqEKqEmqCT7G726ZGgK9qsxVmqKOqGkqMkrKVq1ZENoOesKMqmZKqKq7x82G1ehGKWxKVmoqqqZCsEqVOqqE/2JKZJOKMqK2sqZMkKqJOCMZb7YEKKMKTqCqqmGosGqVxq2EHqgKE0rKqqKqqqKCkEq7xJqGieDGKUKKVmoqqqZCsKq7KCqZ/VDKZZKCMqw7kqGMmKqqoQeK+MsGZpKMqqKuqqKxqZsqKb2EXC8GZkKO2kO9sqKOqEkQxmqGTeQKKIHK/qoqqqZxsKq9OdqGZ2sKZoKKMqK2msZMkEqQKbMZI7PKK3MKVqCqqmEosGqVKHqZBc9KGOxoqqMesqKtqKqMK/2ZFqtZZEOKqqO2kqGosGq2KfcKxqhEKq9xQqK7qsGOqZqeoQMZn7NGK2MK7qCqqmZokGqVKsqZjuLKGjxo7qMesqGwqKqMCj7G07AZGwK9qqxVmqKoqGkqMorKwqsZG4ooesOMqmZKqKq2xA2Kh2aEETMw2kO7qqEoqEq7MLVKIqfEGRoo/qKMqsZKqEq7xr7GxeMGKutKVmoqqqZCsGqcK9qZGVHKZCrCMqO7qqGMmKqQo3eZeMoGZ8KMqqrqkqKxqZsqrtVKrqhGGUCx7qKQqsGKqZmerqMZF79ZKRMKbkCqqmKokGqVKzqZGCZKGTxoQqMesqZ8kKqMCG7GhQFZECKnqqxVmqKrqGmqMKMKUqjZZXoresKMqsZKqZk7xcQGzeHGKB4KVmOqqkZCsZqTrF2Z07gEGstKbqCqqmGOsGqVKeqZ52DKGhxobqMesqECkKqMCD7GLb8ZKxKoqqxVmqKwqGqqM/QKqq9ZEqowesKMqkZKqEk7x0bGreJGKlvKVmoqqkZCsEqJKbqZuViKZDwCMqH7mqGMmKqboQeEtM0GZHKMqqw9kqKxqZsqM7VKsq9GGoCx7mKbqsGKqZmewdMZV7VEKeMK/kCqqmKosGqVK0qZseQKGqxobqMesqKSkKqMC97GOuBZEkKKqqxVmqKvqGqqMe7KEqDZKDovesKMqkZKqZk7x6uGEedGKtwKVmoqqkZCsKquKjqGHVtKZTvCMq97kqGMmKquoNeKJMrGZXKMqqvrkqKxqZsqxEVKqqFKGQCx7mKuqsGKqZmevrMZm7wKKdMKVkCqqmEosGqVKLqZecvKGNxouqMesqKtkKqMCv7GbJjZZ1KOqqxVmqK8qGqqMlqKyqLZGIo8esKMqqZKqGk7xFJGuetGK/rKVmoqqkZCsGqbKsqKKVsKZr8CMq87kqGMmKqJoteGYMqGZGKMqq8CkqKxqZsqnzVKdq3EGZCx7mKJqsGKqZme8xMZQ7TGKsMKMkCqqmZosGqVKDqZFThKGxxoJqMesqG4kKqMCo7G7C0ZGFKCqqxVmqK8qGsqM72KSqiZZwo9esKMqqZKqKm7mGVC;Version=1;Domain=PAGE;Path=/


为什么它没有获得所有剩余的cookie,只有第一个? 我该如何解决?

这里的整个功能:

Private Function LogonPage(ByVal URL As String, ByRef CookieJar As CookieContainer, ByVal PostData As String)
    Dim reader As StreamReader

    Dim Request As HttpWebRequest = HttpWebRequest.Create(URL)

    Request.Method = "POST"
    Request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"
    Request.CookieContainer = CookieJar
    Request.AllowAutoRedirect = False
    Request.ContentType = "application/x-www-form-urlencoded"
    Request.ContentLength = PostData.Length

    Dim requestStream As Stream = Request.GetRequestStream()
    Dim postBytes As Byte() = Encoding.ASCII.GetBytes(PostData)

    requestStream.Write(postBytes, 0, postBytes.Length)
    requestStream.Close()

    Dim Response As HttpWebResponse = Request.GetResponse()

    For Each tempCookie As Cookie In Response.Cookies
        CookieJar.Add(tempCookie)
    Next

    reader = New StreamReader(Response.GetResponseStream())
    Return reader.ReadToEnd()
    Response.Close()
End Function


你能告诉我我做错了什么,如果有可能的话,请指点解决方案? 非常感谢你。

1 个答案:

答案 0 :(得分:0)

如果有多个Cookie,Set-Cookie标题可能包含以逗号,分隔的Cookie,而Cookie属性由分号;分隔,而Response.Headers("Set-Cookie")则返回string中的所有Cookie {1}}。

  1. Response.Headers("Set-Cookie")
  2. 上应用Cookie分隔技术
  3. 提取每个Cookie的名称,值,路径,域等。
  4. 使用此信息创建Cookie个对象
  5. 将Cookie添加到CookieContainer
  6. 请注意,在逗号,上拆分Cookie无用,因为任何Cookie属性(如 expires )都可能包含逗号,例如 expires = Mon,07-Oct-2013 06 :00:00 GMT

    Dim strCookies As String = Response.Headers("Set-Cookie")
    
    ' Splitting on comma is just for example
    Dim cookies() As String = strCookies.Split(commaDelimeter, StringSplitOptions.RemoveEmptyEntries)
    
    For Each ck As String In cookies
        Dim ckProp() As String = ck.Split(semicolonDelimeter, StringSplitOptions.RemoveEmptyEntries)
        Dim cookie As New Cookie(ckProp(0), ckProp(1))
        CookieJar.Add(cookie)        
    Next ck