苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 9371|回复: 11

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

[复制链接]
发表于 2017-1-10 16:16:22 | 显示全部楼层 |阅读模式
    在程序中嵌入自带的WebBrowser,然后用WebBrowser手动或者自动填表单的形式登录,登录后读取WebBrowser的COOKIE传给httphelper类使用,请问这种方法可行吗?
   如果可行的话,那不是所有网站都能POST了, 再也不用那么繁琐的登录时候JS解密和改写之类的了!  现在请问下大家我这种想法可行吗?


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2017-1-10 16:32:53 | 显示全部楼层
是的,但是你有没有想过,这是半自动,比如要频发登录,的,呵呵,,,
 楼主| 发表于 2017-1-10 16:38:26 | 显示全部楼层
有没有这方面的DEMO啊, 给个参考下,实际应用中大部分只要一次登录就行了,后面就全可以用httphelper来操作了
发表于 2017-1-10 16:45:01 | 显示全部楼层
获取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就行了
 楼主| 发表于 2017-1-11 08:20:36 | 显示全部楼层
客服~小小 发表于 2017-1-10 16:45
获取Cookie方法

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

还要用到API吗? 直接httphelper.Cookie=webBrowser1.Document.Cookie这样赋值可以吗?
 楼主| 发表于 2017-1-11 08:24:17 | 显示全部楼层
客服~小小 发表于 2017-1-10 16:45
获取Cookie方法

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

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

地址是你要获取Cookie的地址,获取那个页面的Cookie就传那个地址
用Api获取的比较全,不使用Api会有获取不全的情况
 楼主| 发表于 2017-1-11 09:44:26 | 显示全部楼层
客服~小小 发表于 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都获取不到,奇怪!
发表于 2017-1-11 11:09:22 | 显示全部楼层
q5331006 发表于 2017-1-11 09:44
用了API出现这个错误:
对 PInvoke 函数“WebbrowserPost1!WebbrowserPost1.Form1::InternetGetCookieEx ...

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

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

本版积分规则

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

GMT+8, 2024-12-28 10:28

© 2014-2021

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