如何在 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】:

查看HttpWebResponseCookies 属性。

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 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?