zoukankan      html  css  js  c++  java
  • [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同一级别(该路径发布后也生效,其他的路径有机会再尝试一下)

    就这么多了,欢迎留言交流大笑

  • 相关阅读:
    php数组通过值获得键
    php 重定向
    php 数组排序
    SVN使用操作
    Java + Jsp web 项目
    create-react-app搭建React项目
    双向链表实现查询、删除、插入、末尾增加
    顺序存储结构实现查询、删除、插入、末尾增加
    单向链表实现查询、删除、插入、末尾增加
    数列
  • 原文地址:https://www.cnblogs.com/memento/p/4678115.html
Copyright © 2011-2022 走看看