加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB.net使用httpWebRequest访问带cookie的网站时如何传递cookie值

发布时间:2020-12-17 07:45:39 所属栏目:百科 来源:网络整理
导读:最近做个项目,需要访问某特定网址,获取JSON字串。 访问过程为: 1、登录A页面,POST用户名和密码。如果登录成功后,服务器会Set-Cookie到客户端。 2、将获得的cookie包含到request,访问B页面获得JSON数据。 根据网上搜索到的代码,做了一个测试。结果发现

最近做个项目,需要访问某特定网址,获取JSON字串。

访问过程为:

1、登录A页面,POST用户名和密码。如果登录成功后,服务器会Set-Cookie到客户端。

2、将获得的cookie包含到request,访问B页面获得JSON数据。


根据网上搜索到的代码,做了一个测试。结果发现不稳定,有时候能获得JSON数据,有时候则获取不到。

用HttpAnalyzer跟踪,发现服务器Set-Cookie时,有时候cookie的值没有Version=1,有时候则有Version=1。

只要返回的Cookie里包含Version=1,则Request的CookieContainer就读不到这个cookie。

既然读不到Cookie,那么Request就是不包含cookie的,自然不会返回登陆后才能获得的JSON结果了。


进一步发现,凡是Version=1的Cookie,只有Uri=http://site.com时才有,而完整的rq.RequestUri根本就没有。

<pre name="code" class="plain">Dim rq As HttpWebRequest = CType(HttpWebRequest.Create(loginURL),HttpWebRequest)
        rq.CookieContainer = cc
        rq.ContentType = "application/x-www-form-urlencoded"
        rq.Method = "POST"
        rq.KeepAlive = True
        '设置HttpWebRequest的CookieContainer为刚才建立的那个cc
        '把数据写入HttpWebRequest的Request流 
        Dim rqStream As Stream = rq.GetRequestStream()
        rqStream.Write(byteArray,byteArray.Length)
        rqStream.Close()
Dim rp As HttpWebResponse = CType(rq.GetResponse,HttpWebResponse)
cc1.Add(rp.Cookies)
'MsgBox(rq.RequestUri.Host & "=" & cc1.GetCookieHeader(rq.RequestUri))
 'MsgBox("www.site.com=" & cc1.GetCookieHeader(New Uri("http://www.site.com")))
 'MsgBox("site.com=" & cc1.GetCookieHeader(New Uri("http://site.com")))
 
 

上网搜了半天,百度真是垃圾,一点有用的资料都查不到。用google搜,搜出来几篇外国的文字,说这种情况是.net的request的经典BUG。

还给出了几个修复代码,但是我试了试,没有效果。


整整折腾了一天,突然想到,既然是跟URI有关,那我把所有的Cookie的Domain都强制设置为site.com会不会解决问题呢?

For Each c As Cookie In rp.Cookies
            c.Domain = ".site.com"
            c.Version = 0
            cc1.Add(c)
        Next
于是删掉 cc1.Add(rp.Cookies),换成上面的代码。

特别要注意,一定要把Version改成0,只要是1就出问题。

这样改动之后,问题解决,再也不出错了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读