【WinForm】C# 采用POST登录京东
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登录京东的更多相关文章
- 采用ACE登录设施(一)HelloWorld
(1)开始使用日志设施 使用日志设施,总是要包括头文件: #include "ace/Log_Msg.h" ACE日志的Hello World #ifdef _DEBUG #pra ...
- winform 客户端采用HTTP协议与服务端通信
本来从来没有仔细研究过Http协议,今天因为公司业务需求,调试了半天,终于现在会Winform用Http协议与服务端通信了,其中常用的有POST和Get方式: 仔细看了人人网和新浪等大部分都是采用GE ...
- spring security采用自定义登录页和退出功能
更新... 首先采用的是XML配置方式,请先查看 初识Spring security-添加security 在之前的示例中进行代码修改 项目结构如下: 一.修改spring-security.xml ...
- ssh免密码登录远程服务器(不采用securecrt登录)
http://blog.csdn.net/leexide/article/details/17252369 Linux/UNIX下使用ssh-keygen设置SSH无密码登录 标签: ...
- selenium登录 京东滑动验证码
京东的滑动验证码在页面上是没有原图的,所有我是用ps把他们拼成一个的. from selenium import webdriver from selenium.webdriver import Ac ...
- Winform开发框架之系统登录实现
在业务系统的操作过程中,有时候,用户需要切换用户进行重新登录,这种情况有时候是因为一个人管理多个用户账号,希望通过不同的账号登录进行管理不同的资料,另一种情况是酒店的换班操作,另一个人接替前面的人进行 ...
- 使用Xshell采用证书登录Linux
1,工具--- 用户key生成向导,选择秘钥类型,注意DSA只能选择1024位级以下,超过1024位的服务器不认. 2 给公钥取一个名字,并设置密码,保存为文件 3 在linux 用户目录,用cd ...
- WinForm微信扫码登录
源码还需优化,不喜勿喷. 微信官方文档 : https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat ...
- C#Winform中的一个登录解说(转载的哟,比较不错)
最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到Login窗口.其实,在Visual Studio 6以来,比较正确的做法,是判断Login窗口的返回值,然后决定是否打开主窗体,那么在C ...
随机推荐
- java transient简介
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable ...
- wifi详解(二)
1 Wifi模块解析和启动流程 1.1 框架分析 WIFI整体框架如图所示: 首先,用户程序使用WifiManager类来管理Wifi模块,它能够获得Wifi模块的状态,配置和 ...
- 【转】简单内存泄漏检测方法 解决 Detected memory leaks! 问题
我的环境是: XP SP2 . VS2003 最近在一个项目中,程序退出后都出现内存泄漏: Detected memory leaks! Dumping objects -> {98500} n ...
- 【转】一个windows线程池实现
#ifndef _ThreadPool_H_ #define _ThreadPool_H_ #pragma warning(disable: 4530) #pragma warning(disable ...
- equals方法
一.equals方法介绍 1.1.通过下面的例子掌握equals的用法 package cn.galc.test; public class TestEquals { public static vo ...
- webdriver(python) 学习笔记三
知识点:简单的对象定位 对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象.一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪 ...
- DataGird导出EXCEL的几个方法
DataGird导出EXCEL的几个方法(WebControl) using System;using System.Data;using System.Text;using System.Web;u ...
- C 实现的算法篇
算法的定义:算法是解决实际问题的一种精确的描述方法,目前,广泛认同的定义是:算法的模型分析的一组可行的确定的和有穷的规则 算法的五个特性:有穷性,确切性,输入,输出,可行性.目前算法的可执行的步骤非常 ...
- css3 javascript 实现菜单按钮特效
一个菜单按钮特效案例,简单的实现了动态效果. 代码效果预览地址: http://code.w3ctech.com/detail/2504 <div class="bar" i ...
- .net高级技术(class0515)
本次课程中讲的有的东西都是根据初学者的认知规律进行了调整,并不是严谨的,比如很多地方在多AppDomain条件下很多说法就不对了,但是说严谨了大家就晕了,因此继续不严谨的讲吧. 很多面试题都在这阶段的 ...