苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper万能框架(V2.3-含.netcore) HttpHelper官方出品,无敌框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 最牛的爬虫类,没有爬不到只有想不到 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4378|回复: 7

[HttpHelper] 获取cookie 属性为httpOnly的疑问

[复制链接]
发表于 2014-5-27 20:36:53 | 显示全部楼层 |阅读模式
1金钱
我想知道可以直接使用HttpWebRequest、HttpWebResponse可以获取到带有httpOnly的cookie吗?
如果可以的话,该怎么写呢?

在获取属性为httpOnly的cookie时候 直接使用HttpWebRequest、HttpWebResponse好像获取不到,我看了网上是这么说的(如下),都说要用socket来获取,如果照这么说,那么使用HttpWebRequest来进行POST跟GET遇到带有httpOnly的cookie岂不要切换成scoket来写吗?

[C#] 纯文本查看 复制代码
正常情况下C#可以使用HttpWebRequest、HttpWebResponse和CookieContainer类来获取Cookie,但是当Cookie设置为httponly,我们就不能用上面的方法获取。这时候可以用Socket来模拟http提交。具体如下:

1.先取得默认DNS服务器地址:

*.cs

    IPEndPoint endPoint;
    IPAddress IpList;
    IpList = Dns.GetHostAddresses("www.7fenx.com")[0];


2.模拟http请求,设置http头:

*.cs

    StringBuilder sendString=new StringBuilder(200);
    sendString.Append("POST "+ "/" + " HTTP/1.1\r\n");
    sendString.Append("Accept: */*\r\n");
    sendString.Append("Host: "+host+"\r\n");
    sendString.Append("User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36\r\n");
    sendString.Append("Content-Type: application/x-www-form-urlencoded\r\n");
    sendString.Append("Content-Length: "+sendData.Length+"\r\n");
    sendString.Append("Connection: keep-alive\r\n\r\n");
    sendString.Append(postData+"\r\n");


3.发送请求

*.cs

    byte[] sendBytes = Encoding.GetEncoding(endcoding).GetBytes(sendString.ToString());
    int httpPoint = 80;
    endPoint = new IPEndPoint(ip, httpPoint);
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    socket.Connect(endPoint);
    socket.Send(sendBytes,sendBytes.Length,0);


4.获取服务器的返回信息

*.cs

    Byte[] byteReceive = new Byte[1024];
    Int32 bytes = socket.Receive(byteReceive);
    string str = Encoding.Default.GetString(byteReceive, 0, bytes);


5.提取Cookie内容

*.cs

    Regex rgxCookie = new Regex("Set-Cookie:.*");
    MatchCollection cookies = rgxCookie.Matches(cookie);


提取后需要做的就是解析Cookie就是一些字符串的处理。


发表于 2014-5-28 08:36:27 | 显示全部楼层
这是从那里听来的谬论啊,Cookie都是可以直接获取的,获取不到,可能是因为其他参数原因,或者是是些在浏览中看到的本身就是过期或者是无效的,
QQ截图20140528083643.jpg
获取Cookie是不会他是不是httponly的,只要是Cookie都可以正常获取
回复

使用道具 举报

发表于 2014-5-28 11:23:13 | 显示全部楼层
可以获取到啊,比如模拟登录wordpress的时候就获取到这种  需要处理一下才能登录的说。。。
回复

使用道具 举报

 楼主| 发表于 2014-6-1 10:39:12 | 显示全部楼层
回复

使用道具 举报

发表于 2015-2-3 11:28:01 | 显示全部楼层
yyhapy 发表于 2014-5-28 11:23
可以获取到啊,比如模拟登录wordpress的时候就获取到这种  需要处理一下才能登录的说。。。

获取到httponly的 cookie 要怎么处理??
回复

使用道具 举报

发表于 2015-2-3 23:30:40 | 显示全部楼层
我想你的问题出在登录后的二次跳转上,将AllowAutoRedirect设置为False就行了。
回复

使用道具 举报

发表于 2017-8-6 17:57:32 | 显示全部楼层
yyhapy 发表于 2014-5-28 11:23
可以获取到啊,比如模拟登录wordpress的时候就获取到这种  需要处理一下才能登录的说。。。

请问您说的再处理一下是指什么意思?谢谢
回复

使用道具 举报

发表于 2019-9-13 08:05:38 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备17001017号-1)

GMT+8, 2019-11-12 09:18

© 2017-2018

快速回复 返回顶部 返回列表