[Tool] csdn客户端开发(非官方版)
偶尔间看到一篇博客【清山博客】里讲述了他自己开发的一个CSDN博客客户端,并去下载体验了一下,然后就自己手痒也要开发一下
先看看结果图:
在文章列表里,鼠标右键可以操作【置顶、删除、评论权限】;
下面提一些开发过程中涉及到的技术:
【1】模拟POST/GET请求
try
{
if (m_CC == null)
m_CC = new CookieContainer();
this.m_Request = (HttpWebRequest)WebRequest.Create(sRequestUrl);// sResultUrl 为请求的地址
header.AssignRequest(ref this.m_Request);// 将 header 参数中的属性值赋值给 m_Request 对象
m_Request.AllowAutoRedirect = false;
m_Request.KeepAlive = true;
m_Request.CookieContainer = m_CC;// 返回的 cookie 会附在这个容器里 if (sPostData != null && (!sPostData.Equals("")))// 如果是 post 方法,则会带有 post 数据
{
Byte[] postdata = Encoding.UTF8.GetBytes(sPostData);
m_Request.ContentLength = postdata.Length;
Stream stream = m_Request.GetRequestStream();
stream.Write(postdata, 0, postdata.Length);
stream.Close();
} // 接收响应
m_Response = (HttpWebResponse)m_Request.GetResponse();
}
catch (Exception ex)
{
CloseConnection();
throw new Exception("发送请求异常," + ex.Message);
}
利用 C# 自带的 HttpWebRequest 和 HttpWebResponse 来模拟 POST/GET 操作
【2】Cookie获取
m_Response.Cookies = m_Request.CookieContainer.GetCookies(m_Request.RequestUri);// 根据请求的 URI 获取相应的cookie
CookieCollection cookies = m_Response.Cookies;
m_sCookiesStr = m_Request.CookieContainer.GetCookieHeader(m_Request.RequestUri);// Cookie 字符串
注意,如果需要遍历 Cookie,则需要根据指定的 URI 获得对应的 CookieCollection 对象才可以,在【1】中
m_Request.CookieContainer = m_CC;// 返回的 cookie 会附在这个容器里
只是将返回的 Cookie 放在 CookieContainer 对象容器中,是没有办法直接遍历 Cookie 的
【3】设置header,并发送请求和接收响应
HTTPHeader header = new HTTPHeader();
header.Method = "GET";
header.Host = "write.blog.csdn.net";// 可选,会根据 referer 自行设置
header.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";// 可选
header.Referer = "http://write.blog.csdn.net/category"; m_HtmlHelper.SendRequest("http://write.blog.csdn.net/category", null, header);// 如果是 POST,null 位置即为发送的数据
String sResponseContent = m_HtmlHelper.GetResponseContent();// 获取响应内容(响应 header 下面的内容)
m_HtmlHelper.CloseConnection();// 关闭 Request 请求以及 Response 响应
如果是POST操作的话,还需要设置
header.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
【4】解析网页内容
可以利用 HtmlAgilityPack.HtmlDocument 来解析带有 HTML 标签的内容,举个例子如下:
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(sWebHtmlContent);
HtmlNode rootNode = htmlDoc.DocumentNode;
userinfo.NickName = rootNode.SelectSingleNode("//div[@class='personal_homepage']/div[@class='per_info']/dl/dt/a").InnerText;
SelectSingleNode 或 SelectNodes 方法的参数是 XPath
【5】小细节总结
1:WebBrowser 获取 iframe 中的内容
HtmlDocument iframeDoc = wb_Content.Document.Window.Frames["xhe0_iframe"].Document;
2:默认窗口最大化
this.WindowState = FormWindowState.Maximized;// 初始化最大化窗口
3:ListView用法
// 消息队列初始化
lv_msg.View = View.Details;
lv_msg.BeginUpdate();
lv_msg.Columns.Add("Time");
lv_msg.Columns.Add("Message");
lv_msg.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
lv_msg.EndUpdate();
往 ListView 中添加项
lv_msg.BeginUpdate();
Int32 nRowCount = lv_msg.Items.Count;
lv_msg.Items.Add("no" + nRowCount, DateTime.Now.ToShortTimeString(), 0);
lv_msg.Items["no" + nRowCount].SubItems.Add(sMsg);
lv_msg.Items["no" + nRowCount].EnsureVisible();
lv_msg.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
lv_msg.EndUpdate();
4:C# Winform 路径
Application.ExecutablePath 表示可执行程序的路径,包括程序 .exe 名称
而 Application.ExecutablePath+"\..\" 即表示项目根路径,与bin同一级别(该路径发布后也生效,其他的路径有机会再尝试一下)
就这么多了,欢迎留言交流
[Tool] csdn客户端开发(非官方版)的更多相关文章
- CouchDB客户端开发—Java版
在Fedora上安装CouchDB: yum update yum install couchdb 修改/etc/couchdb下local.ini文件: port = 5984bind_addres ...
- 菜鸟在线教你用Unity3D开发VR版的Hello World
大家好,我是菜鸟在线的小编.这篇短文将告诉大家如何用Unity3D开发VR版的Hello World. 1开启SteamVR并连接Vive设备 (a)登录Steam客户端,并点击右上角的VR按钮,这时 ...
- 用Jersey为Android客户端开发Restful Web Service
平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...
- Navicat Premium for Mac 非官方版不能启动的解决方案
Ps:这篇有点杂记的感觉,就说点废话也没什么影响.废话主要有两点: 1.建议读者也开始写博客,为什么呢?其实我也没有这种写作的习惯,我最开始写博客的时候,感觉我写的东西网上都有,需要的时候找一下肯定能 ...
- 64位主机64位oracle下装32位客户端ODAC(NFPACS版)
64位主机64位oracle下装32位客户端ODAC(NFPACS版) by dd 1.下载Oracle Data Access Components(ODAC) Xcopy的两个版本: x86:(我 ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 多系统开发接口 - 苹果客户端开发接口
最近工作上需要,给苹果客户端开发接口,实现集中统一的用户管理,下面是接口调用参考. 1: 获取OpenId? http://127.0.0.1/GetOpenId.ashx?username=Admi ...
- 在线教学、视频会议 Webus Fox(3) 客户端开发手册
本文主要介绍webus fox 客户端的配置及接口说明. 1. 文件列表和配置 1.1 文件列表 1.2 common.xml 配置 根据服务器端的部署, 替换[ServerUrl] , [RtmpP ...
- [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)
[原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...
- 从零開始开发Android版2048 (一)初始化界面
自学Android一个月多了,一直在工作之余零零散散地看一些东西.感觉经常使用的东西都有些了解了,可是一開始写代码总会出各种奇葩的问题.感觉还是代码写得太少.这样继续杂乱地学习下去进度也太慢了,并且学 ...
随机推荐
- Hybrid App移动应用开发初探
一.移动App类型及其优缺点 1.1 Native App Native App(原生App)是用原生语言(Object-C/Java/C#/....)开发,用户需要下载安装的手机应用. 优点是 可以 ...
- A Beginner's Guide to Paxos
Google Drive: A Beginner's Guide to Paxos The code ideas of Paxos protocol: 1) Optimistic concurrenc ...
- Xcode升级 Alcatraz 无法使用
Alcatraz 主要是可以管理xcode 插件 随着 Xcode 的更新 Alcatraz 有可能无法使用 以下是解决办法: 1,关闭Xcode 2,如果已经安装过 Alcatraz,先卸载掉,然后 ...
- iOS-----dSYM 文件分析工具
来到新公司后,前段时间就一直在忙,前不久 项目 终于成功发布上线了,最近就在给项目做优化,并排除一些线上软件的 bug,因为项目中使用了友盟统计,所以在友盟给出的错误信息统计中能比较方便的找出客户端异 ...
- KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据
Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...
- SQL Server 维护计划实现数据库备份(策略实战)
一.背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划 ...
- html5的audio在safari(windows)中无效
因为mac下的safari不会有这样的问题(OSX默认都装的有QuickTime),而windows下用safari的比例实在小不用考虑. apple算是偷了一个小懒.而所谓的需要quicktime并 ...
- Create views of OpenCASCADE objects in the Debugger
Create views of OpenCASCADE objects in the Debugger eryar@163.com Abstract. The Visual Studio Natvis ...
- WPF textblock加入超链接
<TextBlock Grid.Row=" Margin="75,0,0,0"> <Hyperlink Name="BlogHl" ...
- PHP浅复制与深复制
原文链接:http://www.orlion.ga/731/ php用clone复制对象有一个问题,下面用代码来说明问题: class Foo{ public $bar; public $name; ...