返回的json SWCJ代表 上午的成绩 XWCJ代表下午的成绩。
 
主要步骤:
1. 获取验证码图片
2. 获取cookie
3. 发送验证验证码请求
4 发送成绩查询请求,并获取返回的json
4.解析json,没做
 
做这个的目的是:软考成绩出来前几天,天天都取官网上查,要打开官网,在火狐上输入过的证件号,姓名还得每次打开官网都得输入,
很麻烦,还有做了这个之后,还可以扩展成循环的一次性查多个账号的成绩了。但是对于我个人来讲,我把除了验证码的值都可以直接记录在窗体里了,
打开窗体就可以查了,还是方便。
 
做这个可以借助 fiddler 工具 抓包,但是目前这个时间得火狐浏览器要在浏览器上安装证书才抓得到火狐浏览器得包,所以我借助其他浏览器抓包。
 
获取验证码的时候,同时要获取 cookie,因为后续 验证验证码和成绩查询都得需要带cookie才行,不然就返回 验证码失效得信息。
...
var uri = new Uri(url); //能够获取cookie的HttpClient
CookieContainer cookieContainer = new CookieContainer(); var handler = new HttpClientHandler();
handler.CookieContainer = cookieContainer;
HttpClient httpClient = new HttpClient(handler); //请求头设置
httpClient.DefaultRequestHeaders.Host = host;
//这个必须要
httpClient.DefaultRequestHeaders.Referrer = new Uri( refer);
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("image/*")); httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("*/*"));//Accept: image/webp,image/apng,image/*,*/*;q=0.8 HttpResponseMessage response = httpClient.GetAsync(url).Result;
//返回格式
response.Headers.Add("Content_Type", "image/png"); if (response.IsSuccessStatusCode)
{
// byte[] urlContents = await response.Content.ReadAsByteArrayAsync();
//获取返回的流
stream = await response.Content.ReadAsStreamAsync();
//获取cookie
List<Cookie> cookies = cookieContainer.GetCookies(uri).Cast<Cookie>().ToList();
foreach (var item in cookies)
{
sb_cookie.Append(item.Name);
sb_cookie.Append("=");
sb_cookie.Append(item.Value);
sb_cookie.Append(";"); }
string result = response.Content.ReadAsStringAsync().Result;
return result;
}
return null;
img_jym.Image = Image.FromStream(stream);//这样就构建了验证码图片了
发送验证码验证
//构建请求表单formDictionary<string, string> dic2 = new Dictionary<string, string>();
dic2.Add("captcha", txt_jym.Text);
HttpContent content2 = new FormUrlEncodedContent(dic2.ToList());
//设置手动添加cookie的HttpClient
var handler = new HttpClientHandler() { UseCookies = false };
var httpClient = new HttpClient(handler); httpClient.DefaultRequestHeaders.Host = host;
httpClient.DefaultRequestHeaders.Referrer = new Uri(refer);
//添加cookie
httpClient.DefaultRequestHeaders.Add("Cookie", sb_cookie.ToString());
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("*/*"));//Accept: image/webp,image/apng,image/*,*/*; HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
response.Headers.Add("Content_Type", "application/x-www-form-urlencoded; charset=UTF-8");//Content-Type: application/x-www-form-urlencoded; charset=UTF-8
最后发送成绩查询的请求和发送验证码请求一样的。
代码写得很乱,httpclient都没dispose,多开几次,内存就会升上来得。
源码下载://files.cnblogs.com/files/HelloQLQ/RuanKaoScoreQuery.zip
博客写得很敷衍,只追求博客随笔得数量,不追求博客内容质量!

【C#】做一个winform版本的软考成绩查询软件的更多相关文章

  1. 如何使用impress.js做一个网页版本的PPT

    blockquote{font-size: 18px;line-height:1.5;margin:0;}line-height: 1.5; 要做一个网站制作规范培训,之前村长做过一次培训,但是后来一 ...

  2. 今天做一个winform,想直接把窗体改成输出类库,其他地方直接调结果总提示不能注册组件,回来调度,可以,总结,windows还是直接用新建的类型项目,改容易出错

    如题, 对于winform程序,还是新建一个类库,这样,在类库里面可以添加窗体.这样可以提供其他程序集来调用里面的窗体

  3. 使用DB4o做一个.Net版的website(一)环境

    一个机缘巧合之下,知道了DB4o这个数据库引擎,下载查看之后,被其方便.高效.以及便捷的管理方式锁折服. 故决定使用其做一个.NET版本的web站点,来巩固学到的知识,以及为后来人做一点点贡献. 首先 ...

  4. NanUI for Winform 使用示例【第二集】——做一个所见即所得的Markdown编辑器

    经过了这一个多星期的调整与修复,NanUI for .NET Winform的稳定版已经发布.应广大群友的要求,现已将NanUI的全部代码开源. GitHub: https://github.com/ ...

  5. 软考之路--J2SE,从HelloWorld到传世代码

    "Hello World"程序指的是只在计算机屏幕上输出"Hello, World!"(意为"世界,你好!")这行字符串的计算机程序.hel ...

  6. 软考之PV操作(同步)

    这几天,陆续有那么三两个同学跟我讨论了一下关于软考上的PV操作的题,吾虽不才,但还是把同学们讲通了,在此,特分享一下自己的思路和想法,愿对大家有点帮助! 下面,我们就通过自己做过的试卷上两道题来分析: ...

  7. 做一个聪明的.net程序员

    最近看了传智播客(http://net.itcast.cn/)的.net培训视频,感受颇深,忍不住要把感受写下来跟网友分享一下. 我从接触.net到现在已经至少过去了三五个年头,用.net也已经做了若 ...

  8. 备战“软考”之软件project

    说到"软件project"就有一种非常纠结的感觉!为什么呢?由于刚进入软考复习阶段,大家都把它放到了"比較"次要的地位,由于已经学过两遍,再加上它没有非常难理解 ...

  9. 软考之CPU的寻址方式

    在复习软考的时候,发现CPU的内部工作原理这一部分的内容挺重要的,现对CPU的寻址方式进行了一下总结.以下就来一一介绍一下. 我们都知道一个指令分为操作码和地址码两部分.操作码确定指令的类型.地址码确 ...

  10. 软考之路--从生活着手,看PV如何操作

    PV操作,是软考当中一个很重要的考点,一听到这个名词,顿时赶脚高大上有么有,在软考的历年试题中,也不乏PV操作的身影,老师也对PV操作进行了一次讲课,那时年少,听得稀里糊涂,也不是很理解,在小编的理解 ...

随机推荐

  1. Excel分析师的工资能一直飙升,原因其实是...

    世界上的数据分析师分为使用Excel的分析师和其他分析师两类. 即使在互联网数据分析界,java遍街头,Python不如狗,Excel也是不可替代的. 上班前以为自己是西装笔挺的Excel数据分析师, ...

  2. Taurus.MVC 性能压力测试(ap 压测 和 linux 下wrk 压测):.NET Core 版本

    前言: 最近的 Taurus.MVC 版本,对性能这一块有了不少优化,因此准备进行一下压测,来测试并记录一下 Taurus.MVC 框架的性能,以便后续持续优化改进. 今天先压测 .NET Core  ...

  3. HuffmanTree,哈夫曼树的原理和c++实现

    目录 一.什么是哈夫曼树 二.构造哈夫曼树 三.路径.编码.解码 四.代码 一.什么是哈夫曼树 哈夫曼树又称为最优树. 通过权值来构造树,权值越大,离根节点越近 经常用于无损压缩算法 用于需要优化存储 ...

  4. Godot.NET C#IOC重构(2):TileMap 详解

    目录 前言 TileMap添加 TileMap绘制 TileMap 连续图块 修改纹理原点 统一设置 自动地形 匹配规则 修改匹配概率 修改概率前 修改概率后 随机图块 Scattering 不连续间 ...

  5. leetcode:763. 划分字母区间

    763. 划分字母区间 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段.返回一个表示每个字符串片段的长度的列表. 示例 1: 输入: S = & ...

  6. ASP.NET Core Web API下基于Keycloak的多租户用户授权的实现

    在上文<Keycloak中授权的实现>中,以一个实际案例介绍了Keycloak中用户授权的设置方法.现在回顾一下这个案例: 服务供应商(Service Provider)发布/Weathe ...

  7. 剑指offer39(Java)-数组中出现次数超过一半的数字(简单)

    题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, ...

  8. 力扣303(java)-区域和检索-数组不可变(简单)

    题目: 给定一个整数数组  nums,处理以下类型的多个查询: 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left <= rig ...

  9. 力扣592(java)-分数加减运算(中等)

    题目: 给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分 ...

  10. [FAQ] Solidity 并发执行 ? 重入攻击 ?

    Solidity 实现的合约中,函数操作都是原子操作,旷工本地执行,取得共识后发布到区块链上. 实际发布到区块链上的不存在并发,全节点同步状态到本地. Solidity 中有三种方式进行转账,addr ...