【问题】
用C#代码实现访问一个网页,但是其中该网页会重定向到另外一个地址。
而在重定向之前,根据分析工具分析而得之,会返回对应的cookie信息,此处包含了登陆认证相关的cookie信息。
所以此处需要获得此信息用于后来继续访问相关网页。
但是由于网页重定向了,所以所得到的响应的头部中的cookie信息,已经没了对应的认证信息,所以,想要想办法去获得,在网页重定向的过程中,那些对应的cookie信息。
【解决过程】
网上找了一番,没啥本质帮助。
后来还是自己折腾出来结果了。
其实方法很简单,那就是,在提交网页请求之前,把允许自动重定向,设置为false,即不允许自动重定向,然后获得的响应的头信心中,就包含了我们所需要的cookie信息了。
更加详细的用代码解释为:
原来C#中访问该网页的时候,对应的设置为:
req = (HttpWebRequest)WebRequest.Create(srfUpostUrl);
req.AllowAutoRedirect = true;
然后获得的response就是:
resp = (HttpWebResponse)req.GetResponse();
其所包含的resp.Cookies中,就只是重定向之后的cookie信息了。
而通过在访问网页之前,设置为:
req.AllowAutoRedirect = false;
然后得到的resp.Cookies,就是没有重定向的,我所期望的包含认证信息的cookie了。
对应地,对于重定向之后的地址,我们还有手动的调用代码去访问一次,这样才能真正模拟网页的过程。
【题外话:顺便解决了之前困扰很久的一个问题,那就是直接读取重定向后的内容,其中包含非常多的”\0”字符的问题】
对于上面所说的,第一次的网页请求,如果设置为允许自动重定向的话,那么所得到的response body data,即html源码内容,就包含了非常多的”\0”字符,多达2,3MB,而本身html源码就60多KB左右。
对此,一直没有啥解决办法,但是经过上面无意间为了获得重定向的cookie的值,将一次的允许重定向的http请求,分成两次单独的http请求,而使得最后返回的html源码的数据,是期望的60KB,而没有包含多达2,3MB的”\0”的无效数据。
转载请注明:在路上 » 【已解决】如何获得网页重定向过程中的cookie信息