利用Winform HttpRequest 模拟登陆京东商城

目前只获取订单信息,可以获取图片等其他信息

  1 using System;
  2 using System.Collections.Generic;
  3 using System.IO;
  4 using System.Linq;
  5 using System.Net;
  6 using System.Text;
  7
  8 namespace HelperLib
  9 {
 10     public enum ResponeType
 11     {
 12         String,
 13         File
 14     }
 15     /// <summary>
 16     /// HttpRequest Help
 17     /// Code By:lvxiaojia
 18     /// blog:http://www.cnblogs.com/lvxiaojia/
 19     /// </summary>
 20     public class RequestHelp
 21     {
 22         static CookieContainer cookie = new CookieContainer();
 23         public static string Post(string url, Dictionary<string, string> postData, string referer = "", string accept = "", string contentType = "", ResponeType type = ResponeType.String, string fileSavePath = "", Action<string> action = null, Func<Dictionary<string, string>> fun = null)
 24         {
 25             var result = "";
 26             //var cookie = new CookieContainer();
 27             StringBuilder strPostData = new StringBuilder();
 28             if (postData != null)
 29             {
 30                 postData.AsQueryable().ToList().ForEach(a =>
 31                 {
 32                     strPostData.AppendFormat("{0}={1}&", a.Key, a.Value);
 33                 });
 34             }
 35             byte[] byteArray = Encoding.UTF8.GetBytes(strPostData.ToString().TrimEnd('&'));
 36
 37             HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
 38
 39             webRequest.CookieContainer = cookie;
 40
 41             webRequest.Method = "POST";
 42             if (string.IsNullOrEmpty(accept))
 43                 webRequest.Accept = "application/json, text/javascript, */*;";
 44             else
 45                 webRequest.Accept = accept;
 46
 47             if (!string.IsNullOrEmpty(referer))
 48                 webRequest.Referer = referer;
 49             if (string.IsNullOrEmpty(contentType))
 50                 webRequest.ContentType = "application/x-www-form-urlencoded";
 51             else
 52                 webRequest.ContentType = contentType;
 53
 54             if (strPostData.Length > 0)
 55                 webRequest.ContentLength = byteArray.Length;
 56
 57             //请求
 58             Stream newStream = webRequest.GetRequestStream();
 59             newStream.Write(byteArray, 0, byteArray.Length);
 60             newStream.Close();
 61
 62             HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
 63             var responSteam = response.GetResponseStream();
 64
 65             if (type == ResponeType.String)
 66             {
 67                 StreamReader strRespon = new StreamReader(responSteam, Encoding.UTF8);
 68                 result = strRespon.ReadToEnd();
 69             }
 70             else
 71             {
 72                 BinaryReader br = new BinaryReader(responSteam);
 73                 byte[] byteArr = br.ReadBytes(200000);
 74                 FileStream fs = new FileStream(fileSavePath, FileMode.OpenOrCreate);
 75                 fs.Write(byteArr, 0, byteArr.Length);
 76                 fs.Dispose();
 77                 fs.Close();
 78                 result = "OK";
 79             }
 80             if (action != null)
 81             {
 82                 action.Invoke(result);
 83             }
 84             if (fun != null)
 85             {
 86                 Dictionary<string, string> dic = new Dictionary<string, string>();
 87                 foreach (var item in cookie.GetCookies(webRequest.RequestUri))
 88                 {
 89                     var c = item as Cookie;
 90                     dic.Add(c.Name, c.Value);
 91                 }
 92                 fun = () => { return dic; };
 93             }
 94             return result;
 95
 96         }
 97
 98
 99         public static string Get(string url, Dictionary<string, string> postData=null, string referer = "", Action<string> action = null, Action<Dictionary<string, string>> fun = null)
100         {
101             var result = "";
102
103             StringBuilder strPostData = new StringBuilder("?");
104             if (postData != null)
105             {
106                 postData.AsQueryable().ToList().ForEach(a =>
107                 {
108                     strPostData.AppendFormat("{0}={1}&", a.Key, a.Value);
109                 });
110             }
111             if (strPostData.Length == 1)
112                 strPostData = strPostData.Clear();
113             HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url + strPostData.ToString().TrimEnd('&'));
114             webRequest.CookieContainer = cookie;
115             webRequest.Method = "GET";
116             webRequest.Accept = "text/javascript, text/html, application/xml, text/xml, */*;";
117             if (!string.IsNullOrEmpty(referer))
118                 webRequest.Referer = referer;
119             //请求
120             HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
121             var responSteam = response.GetResponseStream();
122
123             StreamReader strRespon = new StreamReader(responSteam, Encoding.Default);
124             result = strRespon.ReadToEnd();
125
126             if (action != null)
127             {
128                 action.Invoke(result);
129             }
130             if (fun != null)
131             {
132                 Dictionary<string, string> dic = new Dictionary<string, string>();
133                 foreach (var item in cookie.GetCookies(webRequest.RequestUri))
134                 {
135                     var c = item as Cookie;
136                     dic.Add(c.Name, c.Value);
137                 }
138                 fun.Invoke(dic);
139             }
140             return result;
141
142         }
143
144     }
145 }

RequestHelp

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Linq;
 5 using System.Reflection;
 6 using System.Security.Cryptography;
 7 using System.Text;
 8
 9 namespace HelperLib
10 {
11     /// <summary>
12     ///
13     /// </summary>
14     public class EncodingHelp
15     {
16         public static string GetMd5Str32(string str)
17         {
18             MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
19             char[] temp = str.ToCharArray();
20             byte[] buf = new byte[temp.Length];
21             for (int i = 0; i < temp.Length; i++)
22             {
23                 buf[i] = (byte)temp[i];
24             }
25             byte[] data = md5Hasher.ComputeHash(buf);
26             StringBuilder sBuilder = new StringBuilder();
27             for (int i = 0; i < data.Length; i++)
28             {
29                 sBuilder.Append(data[i].ToString("x2"));
30             }
31             return sBuilder.ToString();
32         }
33
34         public static string GetEnumDescription(Enum value)
35         {
36             Type enumType = value.GetType();
37             string name = Enum.GetName(enumType, value);
38             if (name != null)
39             {
40                 // 获取枚举字段。
41                 FieldInfo fieldInfo = enumType.GetField(name);
42                 if (fieldInfo != null)
43                 {
44                     // 获取描述的属性。
45                     DescriptionAttribute attr = Attribute.GetCustomAttribute(fieldInfo,
46                         typeof(DescriptionAttribute), false) as DescriptionAttribute;
47                     if (attr != null)
48                     {
49                         return attr.Description;
50                     }
51                 }
52             }
53             return null;
54         }
55     }
56 }

EncodingHelp

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Diagnostics;
  6 using System.Drawing;
  7 using System.IO;
  8 using System.Linq;
  9 using System.Net;
 10 using System.Text;
 11 using System.Text.RegularExpressions;
 12 using System.Web;
 13 using System.Windows.Forms;
 14 using HelperLib;
 15
 16 namespace SimulationSouGouLogion
 17 {
 18     public partial class LoginJD : Form
 19     {
 20         public LoginJD()
 21         {
 22             InitializeComponent();
 23         }
 24
 25         static string loginUrl = "https://passport.jd.com/new/login.aspx";
 26         static string loginServiceUrl = "http://passport.jd.com/uc/loginService";
 27         static string loginRefererUrl = "http://passport.jd.com/uc/login?ltype=logout";
 28
 29         private void button1_Click(object sender, EventArgs e)
 30         {
 31             richTextBox1.Text = "";
 32
 33             RequestHelp.Get(loginUrl, null);
 34
 35             var login = RequestHelp.Post(loginServiceUrl,
 36                 new Dictionary<string, string>(){
 37                 {"uuid","59c439c8-09de-4cce-8293-7a296b0c0dd1"},
 38                 {"loginname",HttpUtility.UrlEncode(tbUserCode.Text)},
 39                 {"nloginpwd",HttpUtility.UrlEncode(tbPassword.Text)},
 40                 {"loginpwd",HttpUtility.UrlEncode(tbPassword.Text)},
 41                 {"machineNet","machineCpu"},
 42                 {"machineDisk",""},
 43                 {"authcode",""}}, loginRefererUrl);
 44
 45             if (!login.Contains("success"))
 46             {
 47                 if (login.ToLower().Contains("pwd"))
 48                 {
 49                     MessageBox.Show("密码验证不通过!", "提示");
 50                     tbPassword.Text = "";
 51                     tbPassword.Focus();
 52                     return;
 53                 }
 54                 else
 55                 {
 56                     MessageBox.Show("登陆失败!", "提示"); return;
 57                 }
 58             }
 59
 60
 61             var dic = new Dictionary<string, string>();
 62             //获取订单列表
 63             var orderList = RequestHelp.Get("http://order.jd.com/center/list.action?r=635133982534597500", null, fun: a => dic = a);
 64
 65             //分析网页HTML
 66             var regexOrder = Repex(@"<tr id=.{1}track\d+.{1} oty=.{1}\d{1,3}.{1}>.*?</tr>?", orderList);
 67
 68             //获取每个订单信息
 69             regexOrder.ForEach(a =>
 70             {
 71                 var orderCode = Repex(@"<a name=.{1}orderIdLinks.{1} .*? href=.{1}(.*)'?.{1}>(.*)?</a>?", a);
 72                 var order = Match(@"<a name='orderIdLinks' .*? href='(.*)?' clstag=.*>(.*)</a>", orderCode[0]);
 73                 richTextBox1.Text += "订单号:" + order[1] + "\r\n";
 74                 richTextBox1.Text += "订单详情地址:" + order[0] + "\r\n";
 75             });
 76
 77             //获取订单信息
 78             //var details = RequestHelp.Get("http://jd2008.jd.com/jdhome/CancelOrderInfo.aspx?orderid=502561335&PassKey=28C8E5A477E7B255A72A7A67841D5D13");
 79         }
 80
 81         List<string> Repex(string parm, string str)
 82         {
 83             List<string> list = new List<string>();
 84             var regex = new Regex(parm, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase);
 85             var math = regex.Matches(str);
 86             if (math.Count < 0) return list;
 87
 88             foreach (var item in math)
 89             {
 90                 var strdetails = (item as Match).Value;
 91
 92                 list.Add(strdetails);
 93             }
 94
 95             return list;
 96
 97         }
 98         List<string> Match(string parm, string str)
 99         {
100             List<string> list = new List<string>();
101             var math = Regex.Matches(str, parm);
102             if (math.Count < 0) return list;
103             list.Add(math[0].Result("$1"));
104             list.Add(math[0].Result("$2"));
105             return list;
106
107         }
108
109         private void Form1_Load(object sender, EventArgs e)
110         {
111             tbPassword.Focus();
112         }
113
114         private void blogLink_Click(object sender, EventArgs e)
115         {
116             Process.Start("http://www.cnblogs.com/lvxiaojia/");
117         }
118
119     }
120 }

窗体后台代码

转载于:https://www.cnblogs.com/lvxiaojia/p/3292689.html

模拟京东商城登陆HttpRequest相关推荐

  1. js面向对象模拟京东商城图片放大效果

    js面向对象模拟京东商城图片放大效果 JavaScript 的核心是支持面向对象的,同时它也提供了强大灵活的 OOP 语言能力.本文简单介绍一下使用JavaScript面向对象思想模拟京东商城鼠标悬浮 ...

  2. 简单的模拟京东商城购买过程-pymysql

    学习python和数据分析推荐地方: www.lynda.com   获取lynda官网会员的方式:http://item.taobao.com/item.htm?id=557746408785 fr ...

  3. python模拟登录网站_Python爬虫实战之(四)| 模拟登录京东商城

    作者:xiaoyu 微信公众号:Python数据科学 知乎:Python数据分析师 前两篇和大家分享了爬虫中http的一些概念和使用方法,基础篇我们主要介绍了http的请求头,高级篇我们主要介绍了co ...

  4. 用Selenium+xpath爬取京东商城

    前言 这两天原本想在淘宝上爬点东西进行分析的,但没想到淘宝的反爬机制对我这个爬虫菜鸡充满了恶意.先是被数据的格式搞得焦头烂额,好不容易写好了测试一页的代码,准备美滋滋开始大显身手,爬取多页时,发现竟然 ...

  5. 京东618:六年历程步步为营,京东商城的安全保卫战

    电商网站在为广大用户提供网购便利的同时,在安全方面也不可以掉以轻心.那么作为一家高流量的电商,京东是怎样做安全防护的?在618备战期间又需要特别注意哪些事项?京东安全的现状和未来是怎样的?为此,Inf ...

  6. 京东商城上市带来的利与益

    有人说2012是大选年,而对于互联网行业来说,不如说是上市年.继全球第一的社交网站Facebook上市之后,中国最大的电子商城京东商城也要紧锣密鼓的进行IPO了.笔者不分析京东IPO对电商行业的影响. ...

  7. 【android】高仿京东商城App,集成react-native热更功能

    简介 高仿京东商城项目具有完整的结构,代码整洁规范,结构清晰,集成React-Native热更功能,功能还在持续更新中-如果对你有帮助,给个star 使用kotlin语言开发,项目使用模块化开发,降低 ...

  8. 京东商城手机频道商品价格信息的抓取

    在做页面解析时,最大难度在于对动态数据的抓取,特别是由ajax加载的内容.目前对这方面的处理还没很好的解决方案,,虽然有htmlunit之类的模拟浏览器运行工具包,但是其效率以及准确性远远不能满足实际 ...

  9. 基于javaweb仿京东商城管理系统的设计与实现(含论文和程序源码及数据库文件)

    网上购物商城系统以弥补传统购物方式的弊端.在目前的商城里,如果采用网上商城方式,用户购物时就不需要到店里面排队,这样不仅能实时地了解商品的特色,而且方便了顾客,同时也减轻了商城的服务压力.随着WLAN ...

  10. boss直聘java几轮面试,京东商城java高级面试:通过在Boss直聘上收到来自京东金 - 职朋职业圈...

    为了帮助职业圈网友能够及时了解京东商城的面试流程以及面试过程所涉及的面试问题,职业圈小编把刚获得的京东商城面试经验马上编辑好,快速提供给大家,以便能够尽快帮助到有需要的人.这次面试总共花了1天.面试形 ...

最新文章

  1. C++中const的用法
  2. p187让元素垂直居中
  3. [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
  4. js循环写入html不覆盖,【JavaScript】使用document.write输出覆盖HTML问题
  5. Android开发之选项菜单(optinosMenu)
  6. RoseHA集群:RHEL+RoseMirror+Oracle【2】
  7. 常量的定义与使用 1006 c#
  8. Jquery .net MVC
  9. 在Simulink中设计多工位的系列PID控制器Design Family of PID Controllers for Multiple Operating Points
  10. js字符串常用判断方法
  11. 花呗的24期利息计算器_花呗分期利息怎么算(附计算公式大全)
  12. 库存管理一般用什么软件比较好?
  13. 21天养成早起晨记习惯-早起的秘诀
  14. IDEA for Mac设置JVM运行参数解决运行卡顿问题
  15. WebSphere安装配置文档
  16. python游戏寻路_游戏服务端寻路的思路与实现
  17. vue2+ts中表格Ref滚动条置顶写法scrollTop = 0;
  18. android 屏幕分辨率 屏幕密度,android分辨率,屏幕尺寸,屏幕密度关系
  19. HEAD detached at xxxx
  20. Ubuntu18.04安装微信以及打开闪退问题

热门文章

  1. java时间格式化工具类_java日期格式化工具类
  2. yum install gcc报错Error: Package: glibc-2.17-260.el7_6.6.i686 (updates) Requires: glibc-common = 2.17
  3. mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具
  4. EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互
  5. gradle下载很慢的解决方式
  6. GEE开发之Landsat8_SR计算NDVI逐年时序变化
  7. 2020-04-06
  8. ubuntu 18.04安装绿联千兆USB网卡的AX88179芯片驱动(编译报错解决)
  9. 动漫版宫心计:快看漫画VS动漫之家
  10. 【路径生成--绘制的方法】矢量地图巡线式路径探索