Tom20081
2017-02-17 02:28
采纳率: 100%
浏览 2.5k
已采纳

HttpWebRequest模拟 POST 登陆,并保持登陆状态,最好有详细代码

网址:
http://www.iwencai.com/stockpick/search?typed=1&preParams=&ts=1&f=3&qs=pc_%7Esoniu%7Estock%7Estock%7Ehistory%7Equery&selfsectsn=&querytype=&searchfilter=&tid=stockpick&w=%E6%A6%82%E5%BF%B5%E6%9D%BF%E5%9D%97%EF%BC%8C%E5%9F%8E%E5%B8%82

如何使用httpwebrequest登陆,并保持登陆状态(以便后续采集网页数据),请帮忙说一下分析过程,如对抓包结果怎么分析?模拟登陆时都要提交哪些信息,最好给出相应代码,谢谢。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 已采纳
    
    /// <summary>
    /// 结果数组
    /// </summary>
    public class StockResult { public System.Collections.Generic.List<object[]> result; }
    public class Stock {
        /// <summary>
        /// 下载url html代码
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetHtml(string url)
        {
            string html = null;
            System.Net.WebClient wc = new System.Net.WebClient();
            try { html = wc.DownloadString(url); }
            catch { }
            wc.Dispose();
            return html;
        }
        /// <summary>
        /// 下载接口数据序列化为对象
        /// </summary>
        /// <param name="token">token</param>
        /// <param name="page">第几页</param>
        /// <returns></returns>
        private static StockResult LoadData(string token,string page)
        {
            //一次采集10条,要采集更多自己修改perpage=10的参数
            string url = "http://www.iwencai.com/stockpick/cache?token={0}&p={1}&perpage=10&changeperpage=1&showType=[%22%22,%22%22,%22onTable%22,%22onTable%22,%22onTable%22,%22onTable%22,%22onTable%22,%22onTable%22,%22onTable%22,%22onTable%22]";
            url = string.Format(url, token, page);
            string html = GetHtml(url);
            StockResult r = null;
            if (html != null)
            {
                //序列化为对象,用到了Newtonsoft.Json.Net20.dll
                //可以去http://www.w3dev.cn/download/20130218/Newtonsoft.Json.Net20.dll-download.aspx这里下载
                r = Newtonsoft.Json.JsonConvert.DeserializeObject<StockResult>(html);
            }
            return r;
        }
        /// <summary>
        /// 前后截取
        /// </summary>
        /// <param name="str">要截取的字符串</param>
        /// <param name="s">开始字符串</param>
        /// <param name="e">结束字符串</param>
        /// <returns></returns>
        protected static string GetSubstring(string str, string s, string e)
        {
            string r = null;
            int sIndex = str.IndexOf(s);
            if (sIndex != -1)
            {
                int len = s.Length, eIndex = str.IndexOf(e, sIndex + len);
                if (eIndex != -1) r = str.Substring(sIndex + len, eIndex - sIndex - len);
            }
            return r;
        }
        /// <summary>
        /// 获取token
        /// </summary>
        /// <returns></returns>
        private static string GetToken()
        {
            string url = "http://www.iwencai.com/stockpick/search?typed=1&preParams=&ts=1&f=3&qs=pc_%7Esoniu%7Estock%7Estock%7Ehistory%7Equery&selfsectsn=&querytype=&searchfilter=&tid=stockpick&w=%E6%A6%82%E5%BF%B5%E6%9D%BF%E5%9D%97%EF%BC%8C%E5%9F%8E%E5%B8%82";
            string r = GetHtml(url);
    
            if (r != null) r = GetSubstring(r, "token\":\"", "\"");
            return r;
        }
    
        /// <summary>
        /// 测试函数,获取3页数据输出
        /// </summary>
        public static void TestStockDemo()
        {
            string token = GetToken();
            if (token == null) HttpContext.Current.Response.Write("获取token失败!"); 
            else
            {
                for (int i = 1; i <= 3; i++)
                {
                    StockResult r = LoadData(token, i.ToString());
                    if (r == null||r.result==null) HttpContext.Current.Response.Write("下载第" + i.ToString() + "页数据失败!<hr>");
                    else
                    {
                        HttpContext.Current.Response.Write("第" + i.ToString() + "页数据<hr>");
                        foreach (object[] data in r.result)
                        {
                            foreach (object o in data) HttpContext.Current.Response.Write(o.ToString() + "|");
                            HttpContext.Current.Response.Write("<br>");
                        }
                    }
                }
            }
        }
    }
    

    测试

         protected void Page_Load(object sender, EventArgs e)
        {
            Stock.TestStockDemo();
            }
    
    

    输出
    第1页数据603603.SH|博天环境|9.71|44.065|新股与次新股|海淀区|1|--|北京市|公用事业-环保工程-环保工程及服务|
    002849.SZ|威星智能|17.40|44.040|新股与次新股|杭州市|1|--|浙江省|机械设备-电气设备-电气自控设备|
    000507.SZ|珠海港|7.43|10.074|珠港澳物流合作园;一带一路;中巴经济走廊;横琴新区;PTA;新能源;珠海国资改革;粤港澳自贸区;珠海主题公园;地方国资改革;PTA涨价;参股新三板;珠三角区;广东自贸区|珠海市|14|5211970501.5|广东省|交通运输-港口航运-港口Ⅲ|
    000548.SZ|湖南投资|10.30|10.043|好莱坞;交通示范区;长株潭;湖南国资改革;长江中游城市群;地方国资改革|长沙市|6|4672521790.56|湖南省|交通运输-公路铁路运输-高速公路Ⅲ|
    300099.SZ|尤洛卡|13.38|10.033|煤矿安全;军工|泰安市|2|4345278561.92|山东省|机械设备-专用设备-冶金矿采化工设备|
    002323.SZ|雅百特|17.99|10.031|一带一路;智能建筑;并购重组;光伏概念;建筑节能|盐城市|5|4273758382.5|江苏省|建筑材料-建筑装饰-专业工程|
    300609.SZ|汇纳科技|14.15|10.031|新股与次新股|金山区|1|321500000|上海市|信息服务-计算机应用-软件开发及服务|
    603615.SH|茶花股份|17.66|10.031|新股与次新股|福州市|1|963000000|福建省|化工-化工合成材料-其他塑料制品|
    300123.SZ|太阳鸟|20.08|10.027|军民融合;高端装备;好莱坞;海洋经济;融资租赁;海洋执法;游艇;军工;元器件|益阳市|9|5002257803.5|湖南省|国防军工-国防军工-船舶制造|
    300610.SZ|晨化股份|22.28|10.025|新股与次新股|扬州市|1|506250000|江苏省|化工-化学制品-其他化学制品|
    第2页数据601890.SH|亚星锚链|9.22|10.024|南海;军工;海洋经济;船舶升级概念;沪港通概念;高端装备;航母;海工装备;村镇银行|泰州市|9|8039772000|江苏省|国防军工-国防军工-船舶制造|
    300615.SZ|欣天科技|25.04|10.018|新股与次新股|深圳市|1|455200000|广东省|信息设备-通信设备-通信传输设备|
    600184.SH|光电股份|25.70|10.017|军工改制;央企整合;航母;航天军工;引力波;军工;央企国资改革;光伏概念|襄阳市|8|9782252895.36|湖北省|国防军工-国防军工-地面兵装|
    300612.SZ|宣亚国际|28.12|10.016|新股与次新股|朝阳区|1|460080000|北京市|信息服务-传媒-营销服务|
    601882.SH|海天精工|26.81|10.012|新股与次新股|宁波市|1|1272114000|浙江省|机械设备-通用设备-机床工具|
    603330.SH|上海天洋|38.35|10.012|新股与次新股|嘉定区|1|522900000|上海市|化工-化学制品-其他化学制品|
    300605.SZ|恒锋信息|26.38|10.008|新股与次新股|福州市|1|503580000|福建省|信息服务-计算机应用-软件开发及服务|
    603208.SH|江山欧派|57.60|10.008|新股与次新股|衢州市|1|1058195600|浙江省|轻工制造-家用轻工-家具|
    300607.SZ|拓斯达|47.82|10.007|新股与次新股|东莞市|1|787676400|广东省|机械设备-通用设备-其它通用机械|
    300608.SZ|思特奇|34.08|10.007|新股与次新股|海淀区|1|522167900|北京市|信息服务-计算机应用-软件开发及服务|
    第3页数据603690.SH|至纯科技|16.71|10.007|新股与次新股|闵行区|1|789880000|上海市|机械设备-专用设备-其它专用机械|
    002346.SZ|柘中股份|40.02|10.006|保障房|奉贤区|1|2903124000|上海市|机械设备-电气设备-输变电设备|
    603637.SH|镇海股份|38.92|10.006|新股与次新股|宁波市|1|904889494|浙江省|建筑材料-建筑装饰-专业工程|
    002846.SZ|英联股份|25.73|10.004|新股与次新股|汕头市|1|701700000|广东省|轻工制造-包装印刷-包装印刷Ⅲ|
    002558.SZ|世纪游轮|70.27|10.003|游轮;中概股回归;网络游戏;虚拟现实;在线旅游|南岸区|5|4113648420|重庆市|信息服务-传媒-互联网信息服务|
    300578.SZ|会畅通讯|43.88|10.003|新股与次新股|金山区|1|718020000|上海市|信息设备-通信设备-通信配套服务|
    002839.SZ|张家港行|17.82|10.000|新股与次新股;村镇银行|苏州市|2|2928312000|江苏省|金融服务-银行-银行Ⅲ|
    002848.SZ|高斯贝尔|13.31|10.000|新股与次新股|郴州市|1|505780000|湖南省|信息设备-通信设备-终端设备|
    300597.SZ|吉大通信|30.25|10.000|新股与次新股|长春市|1|1650000000|吉林省|信息设备-通信设备-通信配套服务|
    603626.SH|科森科技|48.07|10.000|新股与次新股|苏州市|3|2301534790|江苏省|机械设备-通用设备-金属制品|

    评论
    解决 无用
    打赏 举报
  • 查看更多回答(3条)

相关推荐 更多相似问题