C# POST 传值登录 京东

想做一个DEMO 练练html的传值和接收,就用Winform 做了一个登录京东的程序。

首先参考的网址是:

艹蛋的青春じ 让我蛋疼ミ:http://www.cnblogs.com/lvxiaojia/p/3292689.html

螳螂虾:   http://www.tanglangxia.com/archives/3812.html

然后要做登录,肯定是要抓取数据,分析数据,然后通过后台模拟,get和post所需要的值即可,这个是大致思路。

一、抓取数据

这里采用的工具是Fiddler2(点击下载),进行数据采集分析的。

抓取的大概界面如下:

二、分析数据

uuid=ffc0df62-3bc3-4c12-a654-15676dacf2c4&loginname=zhanghu&nloginpwd=123&loginpwd=123&machineNet=&machineCpu=&machineDisk=&authcode=&qASPhlpNIq=BGWkk

解析PostData 我们可以发现 需要发送的值有:

①uuid  -->uuid是个页面中隐藏的ID如截图

② loginname --> 即账户名

③ nloginpwd 和loginpwd --> 登录密码

④ qASPhlpNIq 和BGWkk  -->这两个是个随机变量的后缀 不管是name 还是 value 但是在页面的位置如截图所示

三、后台模拟

①     获取数据(GET)

分析了数据我们就要想办法获取到所需要的变量,首先,要我采用的方式是在程序预加载的时候获取到除账户和密码外的变量,具体代码如下

//存储uuid

        string uuid = "";

        //存储提交后缀

        string lastName = "";

        string lastValue = "";

private void Form1_Load(object sender, EventArgs e)

        {

HttpItem item = new HttpItem();

            HttpHelper helper = new HttpHelper();

            HttpResult result = new HttpResult();

            item.Method = "GET";

            item.URL = "http://passport.jd.com/new/login.aspx?returnUrl=http%3A%2F%2Fvip.jd.com%2F";

            result = helper.GetHtml(item);

            cookies = result.Cookie;

            string htmltext = result.Html;

            var ary = Regex.Matches(htmltext, @"(?is)<input(?=[^>]*?name=[""'](?<name>[^""'\s]+)[""'])(?=[^>]*?value=[""'](?<value>[^""'\s]+)[""'])[^>]+>").OfType<Match>().Select(t => new { name = t.Groups["name"].Value, value = t.Groups["value"].Value }).ToArray();

            uuid = ary.ToList()[].value;

            lastName = ary.ToList()[].name;

            lastValue = ary.ToList()[].value;

}

②     页面传值(POST)

有了数据 就可以向页面提交了、

/*登录*/

        private void btnLogi_Click(object sender, EventArgs e)

        {

            HttpItem item = new HttpItem();

            HttpHelper helper = new HttpHelper();

            HttpResult result = new HttpResult();

            item.URL = "http://passport.jd.com/uc/loginService?uuid=" + uuid + "&ReturnUrl=http%3A%2F%2Fvip.jd.com%2F&r=0.3457543252407181";

            item.Method = "POST";

            item.Allowautoredirect = true;

            item.ContentType = "application/x-www-form-urlencoded";

            item.Postdata = "uuid=" + uuid + "&loginname=" + txtUser.Text.Trim() + "&loginpwd=" + txtPwd.Text.Trim() + "&machineNet=&machineCpu=&machineDisk=&authcode=&"+lastName+"="+lastValue+"";

            item.Header.Add("x-requested-with", "XMLHttpRequest");

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

            item.Referer = "http://passport.jd.com/new/login.aspx?ReturnUrl=http%3A%2F%2Fvip.jd.com%2F";

            item.Accept = "*/*";

            item.Encoding = Encoding.UTF8;

            item.Cookie = cookies;

            result = helper.GetHtml(item);

            cookies ="__jda=95931165.290243407.1371634814.1371634814.1371634814.1; __jdb=95931165.1.290243407|1.1371634814; __jdc=95931165; __jdv=95931165|direct|-|none|-;" + result.Cookie;

            cookies = cookies.Replace("HttpOnly,", null);

            txtResult.Text += ("登陆成功了!\n" + result.Html);

        }

四、总结

这个小程序DEMO,本来挺简单的一事,但是首先遇到的就是刚开始的时候,分析数据的时候,不全面,没有把传值的最后的后缀看成一个变量,导致登录结果一直是: ({"username":"\u8bf7\u5237\u65b0\u9875\u9762\u540e\u91cd\u65b0\u63d0\u4ea4"}) ,正确的返回结果应该是 ({"success":"http://vip.jd.com/"}) 。其解决方法就是不要用webbrower来获取uuid和后缀 而是用GET的方式获取。 最后,特别要感谢那些帮助我的人,谢谢。

【WinForm】C# 采用POST登录京东的更多相关文章

  1. 采用ACE登录设施(一)HelloWorld

    (1)开始使用日志设施 使用日志设施,总是要包括头文件: #include "ace/Log_Msg.h" ACE日志的Hello World #ifdef _DEBUG #pra ...

  2. winform 客户端采用HTTP协议与服务端通信

    本来从来没有仔细研究过Http协议,今天因为公司业务需求,调试了半天,终于现在会Winform用Http协议与服务端通信了,其中常用的有POST和Get方式: 仔细看了人人网和新浪等大部分都是采用GE ...

  3. spring security采用自定义登录页和退出功能

    更新... 首先采用的是XML配置方式,请先查看  初识Spring security-添加security 在之前的示例中进行代码修改 项目结构如下: 一.修改spring-security.xml ...

  4. ssh免密码登录远程服务器(不采用securecrt登录)

      http://blog.csdn.net/leexide/article/details/17252369       Linux/UNIX下使用ssh-keygen设置SSH无密码登录 标签:  ...

  5. selenium登录 京东滑动验证码

    京东的滑动验证码在页面上是没有原图的,所有我是用ps把他们拼成一个的. from selenium import webdriver from selenium.webdriver import Ac ...

  6. Winform开发框架之系统登录实现

    在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理多个用户账号,希望通过不同的账号登录进行管理不同的资料,另一种情况是酒店的换班操作,另一个人接替前面的人进行 ...

  7. 使用Xshell采用证书登录Linux

    1,工具--- 用户key生成向导,选择秘钥类型,注意DSA只能选择1024位级以下,超过1024位的服务器不认. 2 给公钥取一个名字,并设置密码,保存为文件 3 在linux 用户目录,用cd  ...

  8. WinForm微信扫码登录

    源码还需优化,不喜勿喷. 微信官方文档 : https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat ...

  9. C#Winform中的一个登录解说(转载的哟,比较不错)

    最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到Login窗口.其实,在Visual Studio 6以来,比较正确的做法,是判断Login窗口的返回值,然后决定是否打开主窗体,那么在C ...

随机推荐

  1. 安装服务Memcached+Nginx+Php linux下安装

    Memcached安装 1.      源码安装libevent(下载地址:http://monkey.org/~provos/libevent/) 2.      源码安装memcached(下载地 ...

  2. 【转】定时器、sigevent结构体详解

    原文网址:http://blog.163.com/zheng_he_xiang/blog/static/18650532620116311020390/ 最强大的定时器接口来自POSIX时钟系列,其创 ...

  3. 对Spring IoC容器实现的结构分析

    本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...

  4. 【转】匹配dll(exe)和pdb方法

    1. 静态检查windbg 调试工具包中有一个工具symchk.exe, 选项很多, 下面一个简单的用法可以检查一个 test.exe能不能找到与它匹配的PDB: 这是成功的情形. 下面来个失败的作为 ...

  5. C#中常见的winform控件命名规范

    我们知道Button 常常简称为btn,那么Winform中的其它控件呢,这篇文章在C#的winform控件命名规范 的基础上对一些控件的名称的简称进行了整理. 1. 标准控件 NO. 控件类型简写 ...

  6. 3. 使用绘图API自定义视图 --- 旋转的方块

    import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; impor ...

  7. ASP.NET导出EXCEL类

    最新ASP.NET导出EXCEL类 说明:可以导出ASP.NET页面和DATAGRID(WebControl)数据,可以导出表单头 using System;using System.Data;usi ...

  8. ARM指令集----寻址方式

    ARM指令集可以分为跳转指令,数据处理指令,程序状态寄存器传输指令,LOAD/Store指令,协处理器指令和异常中断产生指令6类 ARM指令集的寻址方式 数据处理指令的操作数的寻址方式 字以及无符号字 ...

  9. 如何阅读Java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...

  10. PHP命名规范【转】

      [转]谭博的个人网站 [类] 1.类名与类文件名采用驼峰式且首字母大写 2.类私有属性和私有方法名称以下划线开头 3.方法名使用驼峰式 [变量] 变量名使用小写字母加下划线 [函数] 函数名使用小 ...