如何在 HttpWebResponse.Headers 中读取 SESSION_ID
Posted
技术标签:
【中文标题】如何在 HttpWebResponse.Headers 中读取 SESSION_ID【英文标题】:How to read SESSION_ID in HttpWebResponse.Headers 【发布时间】:2014-11-11 02:01:28 【问题描述】:我得到了这样的响应头
日期:格林威治标准时间 2014 年 9 月 17 日星期三 06:13:37 内容类型:文本/html;字符集=utf-8 传输编码:分块 连接:保持活动 设置 Cookie:SESSION_ID=8ffc5f91d4d31130267b3a304acd235d;路径=/;安全的; HttpOnly 设置 Cookie:JSESSIONID=8ffc5f91d4d31130267b3a304acd235d;路径=/;安全的; HttpOnly 设置 Cookie:SESSION_KEY=;路径=/;安全的 过期:星期二,1980 年 1 月 1 日 00:00:00 GMT Pragma:无缓存 缓存控制:无缓存 P3P: policyref="/w3c/p3p.xml", CP="NOI DSP COR NID CURa OUR NOR STA" 内容编码:gzip我想从 Set-Cookie 中获取 SESSION_ID
。
这是我的示例代码:
pl_wResData = (HttpWebResponse)pl_wReqData.GetResponse();
pl_strResList = pl_wResData.Headers["Set-Cookie"].Replace(',', ';').Split(';');
for (int i = 0; i < pl_strResList.Length; i++)
pl_strValueList = pl_strResList[i].Split('=');
if (pl_strValueList[0].Equals("SESSION_ID"))
strSID = pl_strValueList[1].ToString();
break;
有谁知道在Set-Cookie
中获取SESSION_ID
的简单方法。
请帮帮我!!
【问题讨论】:
您好,您解决了吗? 【参考方案1】:我解决了我的问题.... 只需在响应请求数据之前创建 CookieCentainer.... 像这样的示例代码
pl_wReqData.CookieContainer = new CookieContainer();
pl_wResData = (HttpWebRespons)pl_wReqData.GetResponse();
if(pl_wResData.StatusCode.Equals(HttpStatusCode.OK))
strSID = pl_wResData.Cookies["SESSION_ID"].Value;
【讨论】:
【参考方案2】:为什么不用cookie collection
,像这样:
foreach (Cookie cookie in pl_wResData.Cookies)
if (cookie.Name != "SESSION_ID")
continue;
strSID = cookie.Value;
【讨论】:
感谢您的回答,但不幸的是我已经尝试过了,它确实有效。 SESSION_ID 是 Set-Cookie 的值,所以我可以使用 cookiecollection 获取它.....【参考方案3】:查看HttpWebResponse
的Cookies
属性。
(WebRequest.GetResponse
返回一个WebResponse
,但是如果底层请求是HTTP,则运行时类型是HttpWebResponse
,你可以强制转换结果。)
Cookies
对象是由名称或数字索引的Cookie
对象的集合。
类似
((HttpWebResponse)myResponse).Cookies["SESSION_ID"].Value
应该这样做。
【讨论】:
感谢您的回答,但不幸的是,我已经尝试过了,但它没有用......当我这样尝试时,我得到'对象引用未设置为实例一个东西。'此异常错误消息.... @HojinKim 在这种情况下:未设置哪个对象?您是否在调试器中查看过Cookies
集合? (很可能你没有得到你认为的 cookie。)
嗯....我检查了 Cookie,在这种情况下,此响应标头中未设置任何 Cookie。我只是请求第三方网站并获取此响应标头。所以在这个Header中获取SESSION_ID太复杂了....以上是关于如何在 HttpWebResponse.Headers 中读取 SESSION_ID的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?