苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 17291|回复: 7

[其他] 关于模拟登录10086的问题,急~

[复制链接]
发表于 2013-7-15 20:42:02 | 显示全部楼层 |阅读模式
近期帮朋友做个充值的插件,遇到登录的问题,调了几天也没解决,求飞哥看看。

请求地址: https://sx.ac.10086.cn/login
使用《苏飞开发助手》的Cookie自动提取器,网络tab页显示登录过程经过了:
https://sx.ac.10086.cn/Login
https://sx.ac.10086.cn/4login/backPage.jsp
http://service.sx.10086.cn/my/
http://service.sx.10086.cn/login/toLoginSso.action
最后访问http://service.sx.10086.cn/my/index.action页面,

四个页面跳转,其中https://sx.ac.10086.cn/Loginhttps://sx.ac.10086.cn/4login/backPage.jsp的HOST为:sx.ac.10086.cn,
http://service.sx.10086.cn/my/http://service.sx.10086.cn/login/toLoginSso.actionhttp://service.sx.10086.cn/my/index.action的HOST为:service.sx.10086.cn
应该涉及到了跨域的问题。

[code=csharp]using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Net;
using mobile.Utils;

namespace mobile.Test
{
    public partial class HttpClientTest : Form
    {
        public HttpClientTest()
        {
            InitializeComponent();
        }

        HttpItem item = null;
        HttpHelper hh = null;
        HttpResult httpResult = null;

        string strAccept = "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
        string strUserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; IEShow Toolbar; IEShow wangsuToolBar)";

        private void HttpClientTest_Load(object sender, EventArgs e)
        {
            hh = new HttpHelper();
            httpResult = new HttpResult();

            showCode();
            getLoginPage();

           // this.textBoxNo.Text = "";
           // this.textBoxFw.Text = "";

        }

        private void getLoginPage()
        {
            item = new HttpItem()
            {
                URL = @"https://sx.ac.10086.cn/login",
                Accept = strAccept,
                UserAgent = strUserAgent,
            };

            item.Header.Add("Accept-Encoding", "gzip, deflate");
            item.Header.Add("Accept-Language", "zh-CN");

            //进入登录页面
            httpResult = hh.GetHtml(item);
        }

        private void showCode()
        {
            Random rad = new Random();//实例化随机数产生器rad;
            String s = rad.Next(10000000, 99999999).ToString();
            String strUrl = "https://sx.ac.10086.cn/common/image.jsp?l=" + s;

            item = new HttpItem()
            {
                URL = strUrl,
                ResultType = ResultType.Byte,
            };

            httpResult = hh.GetHtml(item);
            PrintCookies(httpResult, item);

            if (httpResult.StatusCode == System.Net.HttpStatusCode.OK)
            {
                this.pictureBox1.Image = byteArrayToImage(httpResult.ResultByte);
            }
        }

        /// <summary>
        /// 字节数组生成图片
        /// </summary>
        /// <param name="Bytes">字节数组</param>
        /// <returns>图片</returns>
        private Image byteArrayToImage(byte[] Bytes)
        {
            using (MemoryStream ms = new MemoryStream(Bytes))
            {
                Image outputImg = Image.FromStream(ms);
                return outputImg;
            }
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            string telNo = this.textBoxNo.Text;
            string fwCode = this.textBoxFw.Text;
            string code = this.textBoxYz.Text;

            //------------------------------------------

            string strPostDataF = "type=B&backurl=https%3A%2F%2Fsx.ac.10086.cn%2F4login%2FbackPage.jsp&errorurl=https%3A%2F%2Fsx.ac.10086.cn%2F4login%2FerrorPage.jsp&spid=8a4c9aa637e2567f0137e3c51d050001&RelayState=type%3DB%3Bbackurl%3Dhttp%3A%2F%2Fservice.sx.10086.cn%2Fmy%2F%3Bnl%3D3%3BloginFrom%3Dnull&webPassword=&mobileNum={0}&servicePassword={1}&validCode={2}";
            string strPostData = String.Format(strPostDataF, telNo, fwCode, code);

            //Cookie: CmProvid=sx; WT_FPC=id=241eb65d61fa852cf551373208538717:lv=1373470502215:ss=1373470455118; JSESSIONID=WGp7Rd1QmK64Jq6qzQGBsQWLWqKLp2f5y1n4dqTTDGQRTSL8CLwm!1052125353
            item = new HttpItem()
            {
                URL = @"https://sx.ac.10086.cn/Login",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0",
                Postdata = strPostData,
                Method = "post",
                Referer=@"https://sx.ac.10086.cn/login",
                Cookie = strCookie1 + httpResult.Cookie,//.Replace("path:/", ""),
                //Host="sx.ac.10086.cn",
            };

            item.Header.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
            httpResult = hh.GetHtml(item);

            //-----------------------------------------------------------------------

            string strPostData0 = "displayPic=1&RelayState=type=B;backurl=http%3A%2F%2Fservice.sx.10086.cn%2Fmy%2F;nl=3;loginFrom=null&SAMLart=852c70d88d7749978407b4380df11d53";

            //string strSession = httpResult.Cookie;
            item = new HttpItem()
            {
                URL = @"https://sx.ac.10086.cn/4login/backPage.jsp",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0",
                Postdata = strPostData0,
                Method = "post",
                Referer = @"https://sx.ac.10086.cn/Login",
                // Cookie = httpResult.Cookie,
            };

            item.Header.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");

            httpResult = hh.GetHtml(item);

            //-----------------------------------------------------------------------

           // Console.WriteLine("Session1:" + httpResult.Cookie);

            string strPostData1 = @"RelayState=type=B;backurl=http://service.sx.10086.cn/my/;nl=3;loginFrom=null&SAMLart=5aa148c79231482dbbd9930dfc0cbf25";
            item = new HttpItem()
            {
                URL = @"http://service.sx.10086.cn/my/",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0",
                Postdata = strPostData1,
                Method = "post",
                //Cookie = httpResult.Cookie,
                //Host="service.sx.10086.cn",
            };
            item.Header.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
            httpResult = hh.GetHtml(item);
            //--------------------------------------------------------------------------
            string strPostData2 = @"loginType=0&jumpMenu=01&phoneNo=" + telNo + "&loginPasswordType=0&returl=%252Fmy%252Findex.action";
            item = new HttpItem()
            {
                URL = @"http://service.sx.10086.cn/login/toLoginSso.action",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0",
                Postdata = strPostData2,
                Method = "post",
                Cookie = httpResult.Cookie,
                Referer = @"http://service.sx.10086.cn/my/",
                //Host = "service.sx.10086.cn",
            };
            item.Header.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
            httpResult = hh.GetHtml(item);      
            //-----------------------------------------------------------------------------
            item = new HttpItem()
            {
                URL = @"http://service.sx.10086.cn/my/index.action",
                Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
                UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0",
                Postdata = strPostData,
                Method = "get",
               // Cookie = httpResult.Cookie,
                Referer = @"http://service.sx.10086.cn/my/",
                //Host = "service.sx.10086.cn",
            };      
            item.Header.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
            httpResult = hh.GetHtml(item);
            Console.WriteLine(httpResult.Html);
        }

        private string getHtml(HttpWebResponse httpWebResponse)
        {
            Stream responseStream = httpWebResponse.GetResponseStream();
            StreamReader streamReader = new StreamReader(responseStream, Encoding.Default);
            string html = streamReader.ReadToEnd();//注意这里是直接将所有的字节从头读到尾,也可以一行一行的控制,节省时间
            streamReader.Close();
            responseStream.Close();
            return html;
        }
    }
}
[/code]


测试用户名密码,私信给版主~ 想把获取到的cookie也贴上来的,可超出了帖子的字数限制,请飞哥看看~ 最后是使用.net2.0调试~



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-7-16 08:05:48 | 显示全部楼层
你这个是那里出了问题我不是很确定啊,你登录吗?出问题出什么问题,你贴子里也没有说清楚,只见你说流程和你的实现了。没看到问题出在什么地方。或者说那里有问题
 楼主| 发表于 2013-7-16 09:17:07 | 显示全部楼层
是登录的问题,如果是登录成功, 请求http://service.sx.10086.cn/my/index.action这个页面应该返回正确的HTML信息,现在得不到。
发表于 2013-7-16 09:26:39 | 显示全部楼层
jianbiao11 发表于 2013-7-16 09:17
是登录的问题,如果是登录成功, 请求http://service.sx.10086.cn/my/index.action这个页面应该返回正确的H ...

Content-Type="application/x-www-form-urlencoded" 设置一下这个属性
 楼主| 发表于 2013-7-16 10:04:38 | 显示全部楼层
本帖最后由 jianbiao11 于 2013-7-16 10:16 编辑

还是有问题,返回的信息总是:
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/></head><body><form name="postartifact" method="post" action="https://sx.ac.10086.cn/POST"><input type="hidden" name="SAMLRequest" value="PHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6
Mi4wOnByb3RvY29sIiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNz
ZXJ0aW9uIiBJRD0iYjNmM2U5NzNhNWM5NDFiZDgwM2U2ODEzYWNiMDc2MmMiIElzc3VlSW5zdGFu
dD0iMjAxMy0wNy0xNiAwMjowMzoyOCIgVmVyc2lvbj0iMi4wIj48c2FtbDpJc3N1ZXI+OGE0Yzlh
YTYzNzUwZTc5YzAxMzc1MGVhZTJhZTAwMDE8L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xp
Y3kgQWxsb3dDcmVhdGU9InRydWUiIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4w
Om5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50Ii8+PC9zYW1scDpBdXRoblJlcXVlc3Q+"/><input type="hidden" name="RelayState" value="type=B;backurl=http%3A%2F%2Fservice.sx.10086.cn%3A80%2Fmy%2Findex.action;nl=1;loginFrom=http%3A%2F%2Fservice.sx.10086.cn%3A80%2Fmy%2Findex.action"/></form></body></html>
 楼主| 发表于 2013-7-16 10:17:34 | 显示全部楼层
我把程序发上来了~ 飞哥你给看看~

mobileTest.zip

104.01 KB, 下载次数: 220, 下载积分: 金钱 -1

发表于 2013-7-16 10:24:03 | 显示全部楼层
jianbiao11 发表于 2013-7-16 10:04
还是有问题,返回的信息总是:

你会调试程序吗?如果会你先调试看看是那一步出了问题,登录之后先看看、Cookie有没有,就算是出错了看看是那里的问题,先解决登录再说后面的操作,登录都没有登录上,你写的再多也是多余的。

这个返回的信息好像是要再次Post,你可以再模拟一下提交,有时候便当是要好几步才能完成的。不要想的那么简单
 楼主| 发表于 2013-7-16 10:47:48 | 显示全部楼层
哥,我也是老程序员了啊 ~  这块领域确实是不怎么熟悉啊~ 测试登录成功与否,不是得需要看看访问登录后的页面是否正确吗? cookie都有啊~ 每个阶段的得到的cookie我都记录看的~  实在是搞不定了~ 是不是这个网站就是问了防止模拟登录做了安全措施啊~ 他们的服务器不在一个域上~
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-12-27 05:43

© 2014-2021

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