苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

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

苏飞开发助手V2.0源码下载C#基类库,最全的C#帮助类工具网(tool.sufeinet.com)源码下载C#皮肤下载,GDI+完美实战
查看: 200|回复: 11

[HttpHelper] 用WebBrowser登录,然后再把WebBrowser的COOKIE传给httphelper可以吗?

[复制链接]

该用户从未签到

发表于 7 天前 | 显示全部楼层 |阅读模式
    在程序中嵌入自带的WebBrowser,然后用WebBrowser手动或者自动填表单的形式登录,登录后读取WebBrowser的COOKIE传给httphelper类使用,请问这种方法可行吗?
   如果可行的话,那不是所有网站都能POST了, 再也不用那么繁琐的登录时候JS解密和改写之类的了!  现在请问下大家我这种想法可行吗?
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 81 天

    [LV.6]常住居民II

    发表于 7 天前 | 显示全部楼层
    是的,但是你有没有想过,这是半自动,比如要频发登录,的,呵呵,,,

    该用户从未签到

     楼主| 发表于 7 天前 | 显示全部楼层
    有没有这方面的DEMO啊, 给个参考下,实际应用中大部分只要一次登录就行了,后面就全可以用httphelper来操作了
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 81 天

    [LV.6]常住居民II

    发表于 7 天前 | 显示全部楼层
    获取Cookie方法

    [C#] 纯文本查看 复制代码
    //取当前webBrowser登录后的Cookie值   
            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved);
            //取出Cookie,当登录后才能取    
            private static string GetCookieString(string url)
            {
                // Determine the size of the cookie      
                int datasize = 256;
                StringBuilder cookieData = new StringBuilder(datasize);
                if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
                {
                    if (datasize < 0)
                        return null;
                    // Allocate stringbuilder large enough to hold the cookie    
                    cookieData = new StringBuilder(datasize);
                    if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
                        return null;
                }
                return cookieData.ToString();
            }



    用法就不用多说了吧,直接用就行了
    这个很简单,就是直接把WebBrowser获取到的Cookie给HttpHelper就行了

    该用户从未签到

     楼主| 发表于 6 天前 | 显示全部楼层
    客服~小小 发表于 2017-1-10 16:45
    获取Cookie方法

    [mw_shl_code=csharp,true]//取当前webBrowser登录后的Cookie值   

    还要用到API吗? 直接httphelper.Cookie=webBrowser1.Document.Cookie这样赋值可以吗?

    该用户从未签到

     楼主| 发表于 6 天前 | 显示全部楼层
    客服~小小 发表于 2017-1-10 16:45
    获取Cookie方法

    [mw_shl_code=csharp,true]//取当前webBrowser登录后的Cookie值   

    还有这个API传递的URL参数,是登录时候的那个地址,还是登录以后跳转的那个地址呢?
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 81 天

    [LV.6]常住居民II

    发表于 6 天前 | 显示全部楼层
    q5331006 发表于 2017-1-11 08:24
    还有这个API传递的URL参数,是登录时候的那个地址,还是登录以后跳转的那个地址呢?

    地址是你要获取Cookie的地址,获取那个页面的Cookie就传那个地址
    用Api获取的比较全,不使用Api会有获取不全的情况

    该用户从未签到

     楼主| 发表于 6 天前 | 显示全部楼层
    客服~小小 发表于 2017-1-11 09:16
    地址是你要获取Cookie的地址,获取那个页面的Cookie就传那个地址
    用Api获取的比较全,不使用Api会有获取 ...

    用了API出现这个错误:
    对 PInvoke 函数“WebbrowserPost1!WebbrowserPost1.Form1::InternetGetCookieEx”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
    还有webBrowser1.Document.Cookie这个是不是获取不到httponly的cookie?
    而且好像InternetGetCookieEx这个API有的IE版本获取不到,我现在的IE8都获取不到,奇怪!
  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 81 天

    [LV.6]常住居民II

    发表于 6 天前 | 显示全部楼层
    q5331006 发表于 2017-1-11 09:44
    用了API出现这个错误:
    对 PInvoke 函数“WebbrowserPost1!WebbrowserPost1.Form1::InternetGetCookieEx ...

    你调试的吧,这个“Api不能在调试下运行,直接运行可以

    该用户从未签到

     楼主| 发表于 6 天前 | 显示全部楼层
    客服~小小 发表于 2017-1-11 11:09
    你调试的吧,这个“Api不能在调试下运行,直接运行可以

    我去,真是! 在调试状态一直出错, 直接运行就可以了, 这是哪门子问题啊, 第一次碰到这个问题,郁闷!
    还有我同样的代码,为什么在.net 2.0下用这个API获取不到, 而在4.0就可以获取到了?
    多谢啊高手!
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则

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

    GMT+8, 2017-1-17 12:54

    © 2016-2017


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