使用.NET开发的网站程序,当我们发布文章的时候,我们希望自动通知百度自己的网站有文章发布了,这样就会引起百度的注意,这样对于百度的收录会有很好的效果,下面就讲解怎样自动Ping 百度,通知百度收录。

ping是基于XML_RPC标准协议的更新通告服务,用于博客把内容更新快速通知给百度、google等搜索引擎,以便搜索引擎及时进行抓取和更新。
你可以采取手动通知和自动通知两种方式使用ping服务:
访问http://ping.baidu.com/ping.html页面,在输入框中输入博客地址或者feed地址,点击“提交博客”按钮即可。
如果您的博客程序支持自动ping功能,您只需把百度的Ping服务地址配置到你的Blog发布后台或者客户端程序中,就可以实现自动通知的功能。百度ping服务的地址为:http://ping.baidu.com/ping/RPC2,所以当我们使用Wordpress建立博客的时候,只要把百度的ping服务地址加到通告服务的URL列表中,在“设置”->“撰写”菜单可以找到,如下图所示:

发送给百度Ping服务的XML-RPC客户请求需要包含如下元素:
以下是百度官方给出的Ping请求包的例子:
POST /ping/RPC2 HTTP/1.0
User-Agent: request
Host: ping.baidu.com
Content-Type: text/xml
Content-Length: 511
    weblogUpdates.extendedPing 
    
        
            百度的空间 http://hi.baidu.com/baidu/ http://baidu.com/blog/example.html http://hi.baidu.com/baidu/rss  
 
xml-rpc响应http包体为一个xml文档,含有一个int值,0表示推送成功,其他值表示推送失败,目前只有0和1。推送成功时的服务器响应包为如下所示:
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 11:54:53 GMT
Content-Length: 156
Connection: close
Content-Type: text/xml
    
        
            
                0 
             
        
     
 
如果推送失败如下所示:
HTTP/1.1 200 OK
Date: Mon, 11 May 2009 11:54:53 GMT
Content-Length: 156
Connection: close
Content-Type: text/xml
    
        
            
                1 
             
        
     
 
因此如果使用.NET的c#代码来进行自动Ping百度我们的思路就很明白了,就是推送一个和给出标准的XML格式。
////// 创建 MethodCall xml 来推送给百度的Ping服务。 /// /// ///public string CreateMethodCallXML(string methodName) { methodCall methodCall = new methodCall(); IList paramList = new List(); methodCall.methodName = methodName; //Blog name param param = new param(); value value = new value(); value.stringValue = "你的博客名称"; param.value = value; paramList.Add(param); //博客首页地址 param = new param(); value = new value(); value.stringValue = "博客的官网首页url地址"; param.value = value; paramList.Add(param); //博客文章的地址 param = new param(); value = new value(); value.stringValue = "博客文章的url地址"; param.value = value; paramList.Add(param); //博客的RSS地址 param = new param(); value = new value(); value.stringValue = "博客的RSS地址"; param.value = value; paramList.Add(param); methodCall.paramSet = paramList.ToArray(); return SerializeMethodCall(methodCall); } 
methodCall类的代码如下所示,这是一个序列化的对象,用于创建xml
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace PingBaidu
{
    /// 
    /// Ping baidu.
    ///  
    public partial class methodCall
    {
        /// 
SerializeMethodCall方法如下所示,这是为了将序列化对象转换为xml字符串。
private string SerializeMethodCall(methodCall methodCall)
{
	StringBuilder xmlBuilder = new StringBuilder();
	using (StringWriter stringWriter = new StringWriter(xmlBuilder, CultureInfo.InvariantCulture))
	{
		XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
		xmlWriter.WriteProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\"");
		urlSetSerializer.Serialize(xmlWriter, methodCall);
	}
	return xmlBuilder.ToString();
}
通过http请求就xml字符串推送给百度ping服务器,通知百度文章的更新或新加。代码如下所示:
private string PingBaiduRequest(string requestURL, string pingBaiduXMLString)
{
	try
	{
		byte[] postDataBytes = Encoding.UTF8.GetBytes(pingBaiduXMLString);
		HttpWebRequest request = HttpWebRequest.Create(requestURL) as HttpWebRequest;
		request.Accept = "application/json, text/javascript, */*; q=0.01";
		request.ContentType = "application/x-www-form-urlencoded";
		request.Method = "POST";
		request.UserAgent = "request";
		request.ProtocolVersion = new Version("1.0");
		request.ContentLength = postDataBytes.Length;
		request.Timeout = 30000;
		using (Stream requestStream = request.GetRequestStream())
		{
			requestStream.Write(postDataBytes, 0, postDataBytes.Length);
		}
		using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
		using (Stream responseStream = response.GetResponseStream())
		using (StreamReader reader = new StreamReader(responseStream))
		{
			return reader.ReadToEnd();
		}
	}
	catch (Exception e)
	{
	}
	return null;
}
////// Ping 百度 /// public string PingBaidu() { string pingBaiduXMLString = CreateMethodCallXML("Ping百度的方法(通常为weblogUpdates.extendedPing)"); if (string.IsNullOrEmpty(pingBaiduXMLString)) return null; string result=PingBaiduRequest("ping 百度的URL(通常为http://ping.baidu.com/ping/RPC2)", pingBaiduXMLString); return result; }
根据返回的字符串可以判断是否ping百度成功与否。
意思就是.NET/C# 自动 Ping 百度的方法示例,希望可以帮助到需要的朋友,代码都是经过亲自测试可以通过的,只是需要把汉字描述的内容改成自己的地址即可。如有疑问,请给我留言,谢谢阅读。