• C# 自动提交到百度ping服务


    C# 自动提交到百度ping服务

    今天无意之间看到百度站长中有这个ping服务(孤陋寡闻呀).... 

    那什么什么是Ping服务

    ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度,以便百度及时进行抓取和更新。

    看着是简单的http post 提交.但是自己用 WebRequest 模拟时.死活返回操作超时.简直无语.

    下面百度ping 服务的例子(注意红色部分.现在http的版本是1.1了.就是这个细节导致无法提交),顺便说说Fiddler 这个工具确实很好用.

    复制代码
    Ping请求包的例子 http://zhanzhang.baidu.com/tools/ping
    
    weblogUpdates.extendedPing xml-rpc请求举例:
    POST /ping/RPC2 HTTP/1.0
    User-Agent: request
    Host: ping.baidu.com
    Content-Type: text/xml
    Content-Length: 511
    
    <?xml version="1.0" encoding="UTF-8"?><methodCall>
        <methodName>weblogUpdates.extendedPing</methodName>
        <params>
            <param>
                <value><string>百度的空间</string></value>
            </param>
            <param>
                <value><string>http://hi.baidu.com/baidu/</string></value>
            </param>
            <param>
                <value><string>http://baidu.com/blog/example.html</string></value>
            </param>
            <param>
                <value><string>http://hi.baidu.com/baidu/rss</string></value>
            </param>
        </params>
    </methodCall>
    复制代码

    下面放出我自己的简单例子(已经通过测试了)

    复制代码
          public void postToPing( )
            {
                try
                { 
                    string posturl = "http://ping.baidu.com/ping/RPC2"; //post 提交地址
                    string refurl = "http://www.weletgo.com/"; //这里可以随便填写.
                    string content_type = "text/xml";        //提交类型.这里一定要text/xml
                    string postdt = postdata();              //提交数据
                    string str = baiduping(posturl, postdt, content_type, refurl, false, Encoding.UTF8); 
                    Stream sm = new System.IO.MemoryStream(Encoding.UTF8.GetBytes(str)); //下面这里检测提交是否成功
                    XElement xle = XElement.Load(sm);
                    var query = xle.Descendants("int");
                    if (query.Count() > 0)
                    {
                        string _val = query.ElementAtOrDefault(0).Value;
                        if (_val == "1")
                        {
                            Console.WriteLine("失败");
                        }
                        else
                        {
                            Console.WriteLine("成功");
                        }
                    } 
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
    
                   // log.Error(ex.Message);
                }
            }
            private string postdata()
            { 
                //注意xml拼接的时候,xml的第一行的开头必须不能有空格等 //下面直接是引用百度的例子
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("<?xml version="1.0" encoding="UTF-8"?><methodCall>");
                sb.AppendLine(" <methodName>weblogUpdates.extendedPing</methodName>");
                sb.AppendLine("<params>");
                sb.AppendLine(" <param> ");
                sb.AppendLine("<value><string>百度的空间</string></value>");
                sb.AppendLine(" </param> ");
                sb.AppendLine(" <param>");
                sb.AppendLine("<value><string>http://hi.baidu.com/baidu/</string></value>");
                sb.AppendLine("</param>");
                sb.AppendLine("<param>");
                sb.AppendLine(" <value><string>http://baidu.com/blog/example.html</string></value>");
                sb.AppendLine(" </param>");
                sb.AppendLine(" <param> ");
                sb.AppendLine("<value><string>http://hi.baidu.com/baidu/rss</string></value>");
                sb.AppendLine("</param> ");
                sb.AppendLine("</params>");
                sb.AppendLine("</methodCall>");
                return sb.ToString().Trim();
            }
    
            private string baiduping(string targetURL, string formData, string contentType, string referer, bool allowAutoRedirect, Encoding ed)
            {
                ASCIIEncoding encoding = new ASCIIEncoding(); 
                byte[] data = encoding.GetBytes(formData); 
                //请求目标网页
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetURL);
                request.Method = "POST";    //使用post方式发送数据 
                request.UserAgent = "request";
                request.Referer = referer;
                request.ProtocolVersion = new Version("1.0");  //注意这里这个版本好.一定要设置.现在默认提交是1.1了.否则会一直提示504
                request.ContentType = contentType == "" ? "application/x-www-form-urlencoded" : contentType;
                request.Timeout = 1000 * 10;
                request.ContentLength = data.Length;
                Stream newStream = request.GetRequestStream();
                newStream.Write(data, 0, data.Length);
                newStream.Close();
    
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream stream = response.GetResponseStream(); 
                string html = new StreamReader(stream, ed).ReadToEnd();
                return html;  
            }
    复制代码

    代码部分就是这么简单.自动提交当然要在数据添加这里调用posttoping 这方法.现在有很多提供插件.只需配置一下就行了.

    同步发布到http://www.weletgo.com/  弄这个网站的最初原因是逼自己学习mvc3. 现在终于会点皮毛了,很久没有弄web这方面了.

    资源方面就是写个程序.在后台自动抓取别人的东西,没啥技术含量

     
     
     
  • 相关阅读:
    less引入、关键字、条件表达式、循环、合并属性
    less 嵌套规则、运算、函数、命名空间
    初识less
    ligerui_实际项目_001:利用ligerLayout、ligerAccordion实现可折叠的菜单效果
    ligerUI_入门_001_设置文本能否被编辑、事件
    AJax 学习笔记二(onreadystatechange的作用)
    JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合
    JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"
    JSon_零基础_006_将JSon格式的字符串转换为Java对象
    JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3261761.html
Copyright © 2020-2023  润新知