模拟京东商城登陆HttpRequest
利用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相关推荐
- js面向对象模拟京东商城图片放大效果
js面向对象模拟京东商城图片放大效果 JavaScript 的核心是支持面向对象的,同时它也提供了强大灵活的 OOP 语言能力.本文简单介绍一下使用JavaScript面向对象思想模拟京东商城鼠标悬浮 ...
- 简单的模拟京东商城购买过程-pymysql
学习python和数据分析推荐地方: www.lynda.com 获取lynda官网会员的方式:http://item.taobao.com/item.htm?id=557746408785 fr ...
- python模拟登录网站_Python爬虫实战之(四)| 模拟登录京东商城
作者:xiaoyu 微信公众号:Python数据科学 知乎:Python数据分析师 前两篇和大家分享了爬虫中http的一些概念和使用方法,基础篇我们主要介绍了http的请求头,高级篇我们主要介绍了co ...
- 用Selenium+xpath爬取京东商城
前言 这两天原本想在淘宝上爬点东西进行分析的,但没想到淘宝的反爬机制对我这个爬虫菜鸡充满了恶意.先是被数据的格式搞得焦头烂额,好不容易写好了测试一页的代码,准备美滋滋开始大显身手,爬取多页时,发现竟然 ...
- 京东618:六年历程步步为营,京东商城的安全保卫战
电商网站在为广大用户提供网购便利的同时,在安全方面也不可以掉以轻心.那么作为一家高流量的电商,京东是怎样做安全防护的?在618备战期间又需要特别注意哪些事项?京东安全的现状和未来是怎样的?为此,Inf ...
- 京东商城上市带来的利与益
有人说2012是大选年,而对于互联网行业来说,不如说是上市年.继全球第一的社交网站Facebook上市之后,中国最大的电子商城京东商城也要紧锣密鼓的进行IPO了.笔者不分析京东IPO对电商行业的影响. ...
- 【android】高仿京东商城App,集成react-native热更功能
简介 高仿京东商城项目具有完整的结构,代码整洁规范,结构清晰,集成React-Native热更功能,功能还在持续更新中-如果对你有帮助,给个star 使用kotlin语言开发,项目使用模块化开发,降低 ...
- 京东商城手机频道商品价格信息的抓取
在做页面解析时,最大难度在于对动态数据的抓取,特别是由ajax加载的内容.目前对这方面的处理还没很好的解决方案,,虽然有htmlunit之类的模拟浏览器运行工具包,但是其效率以及准确性远远不能满足实际 ...
- 基于javaweb仿京东商城管理系统的设计与实现(含论文和程序源码及数据库文件)
网上购物商城系统以弥补传统购物方式的弊端.在目前的商城里,如果采用网上商城方式,用户购物时就不需要到店里面排队,这样不仅能实时地了解商品的特色,而且方便了顾客,同时也减轻了商城的服务压力.随着WLAN ...
- boss直聘java几轮面试,京东商城java高级面试:通过在Boss直聘上收到来自京东金 - 职朋职业圈...
为了帮助职业圈网友能够及时了解京东商城的面试流程以及面试过程所涉及的面试问题,职业圈小编把刚获得的京东商城面试经验马上编辑好,快速提供给大家,以便能够尽快帮助到有需要的人.这次面试总共花了1天.面试形 ...
最新文章
- C++中const的用法
- p187让元素垂直居中
- [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
- js循环写入html不覆盖,【JavaScript】使用document.write输出覆盖HTML问题
- Android开发之选项菜单(optinosMenu)
- RoseHA集群:RHEL+RoseMirror+Oracle【2】
- 常量的定义与使用 1006 c#
- Jquery .net MVC
- 在Simulink中设计多工位的系列PID控制器Design Family of PID Controllers for Multiple Operating Points
- js字符串常用判断方法
- 花呗的24期利息计算器_花呗分期利息怎么算(附计算公式大全)
- 库存管理一般用什么软件比较好?
- 21天养成早起晨记习惯-早起的秘诀
- IDEA for Mac设置JVM运行参数解决运行卡顿问题
- WebSphere安装配置文档
- python游戏寻路_游戏服务端寻路的思路与实现
- vue2+ts中表格Ref滚动条置顶写法scrollTop = 0;
- android 屏幕分辨率 屏幕密度,android分辨率,屏幕尺寸,屏幕密度关系
- HEAD detached at xxxx
- Ubuntu18.04安装微信以及打开闪退问题
热门文章
- java时间格式化工具类_java日期格式化工具类
- yum install gcc报错Error: Package: glibc-2.17-260.el7_6.6.i686 (updates) Requires: glibc-common = 2.17
- mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具
- EasyDarwin接口的使用——使用C++编写客户端实现与EasyDarwin服务器的交互
- gradle下载很慢的解决方式
- GEE开发之Landsat8_SR计算NDVI逐年时序变化
- 2020-04-06
- ubuntu 18.04安装绿联千兆USB网卡的AX88179芯片驱动(编译报错解决)
- 动漫版宫心计:快看漫画VS动漫之家
- 【路径生成--绘制的方法】矢量地图巡线式路径探索