zoukankan      html  css  js  c++  java
  • XMLRPC in C# (转)

    Wordpress进行操作,除了通过他的Web后台外,还有一种方法就是通过XML-RPC来实现。
    关于XML-RPC我就不再赘述了,简单的来说就是:将包含着操作命令和操作数据的XML通过Http传输给XML-RPC Server。然后Server根据此XML分析出来的命令和数据进行操作,然后返回用户一个XML,里面包含了用户所需要数据的XML。

    拿Wordpress自身的wp.getUsersBlogs命令举例

    wp.getUsersBlogs
    Retrieve the blogs of the users.
    Parameters

    • string username
    • string password

    Return Values

    • array
      • struct
        • boolean is_admin
        • string url
        • int blog_id
        • string blog_name
        • string xmlrpc_url

    以上is_admin是表示该用户是否为管理员,url当然是你的博客地址,blog_id指的是博客的id到后面有用,blog_name指的是博客名(比方说我的是“风云阁”),xmlrpc_url是XML-RPC Server的地址。
    值得一提的是,针对Wordpress而言,如果你的博客地址是http://www.xxx.com,则他的XML-RPC Server地址是http://wwwxxx.com/xmlrpc.php。
    它的输入XML是

    <methodCall>
        <methodName>wp.getUsersBlogs</methodName>
        <params>
            <param>
                <value>
                    Username
                </value>
            </param>
            <param>
                <value>
                    Password
                </value>
            </param>
        </params>
    </methodCall>

    以上的Username当然就是用户名了,Password当然就是你的密码,wp.getUsersBlogs是获得Blog的操作名。
    当正确的时候返回的XML是(以我为例)

    <methodResponse>
      <params>
        <param>
          <value>
            <array>
              <data>
                <value>
                  <struct>
                    <member>
                      <name>isAdmin</name>
                      <value>
                        <boolean>1</boolean>
                      </value>
                    </member>
                    <member>
                      <name>url</name>
                      <value>
                        <string>http://www.iron-feet.cn/</string>
                      </value>
                    </member>
                    <member>
                      <name>blogid</name>
                      <value>
                        <string>1</string>
                      </value>
                    </member>
                    <member>
                      <name>blogName</name>
                      <value>
                        <string>风云阁</string>
                      </value>
                    </member>
                    <member>
                      <name>xmlrpc</name>
                      <value>
                        <string>http://www.iron-feet.cn/xmlrpc.php</string>
                      </value>
                    </member>
                  </struct>
                </value>
              </data>
            </array>
          </value>
        </param>
      </params>
    </methodResponse>

    当用户名和密码出错的时候的XML是

    <methodResponse>
      <fault>
        <value>
          <struct>
            <member>
              <name>faultCode</name>
              <value>
                <int>403</int>
              </value>
            </member>
            <member>
              <name>faultString</name>
              <value>
                <string>Bad login/pass combination.</string>
              </value>
            </member>
          </struct>
        </value>
      </fault>
    </methodResponse>

    根据Wordpress官方网站,Wordpress还支持Blogger API、MetaWeblog API以及Movable Type API

    WordPress uses an XML-RPC interface. We currently support the Blogger API,metaWeblog API, and the Movable Type API.

    各位看官们可以通过相关文档以及我上面的结构,获得正确的XML

    自从有了Linq,很多东西变得非常方便了,比方说构造XML。接下来,介绍一下如果利用C#语言通过Linq构造XML,
    比方说刚刚那个wp.getUsersBlogs的XML,构造代码如下:

                        XElement XmethodCall=
                            new XElement("methodCall",
                                new XElement("methodName", "wp.getUsersBlogs"),
                                new XElement("params",
                                    new XElement("param",
                                        new XElement("value",
                                            new XElement("string", _strUsr)
                                        )
                                    ),
                                    new XElement("param",
                                        new XElement("value",
                                            new XElement("string", _strPwd)
                                        )
                                    )
                                )
                            );

    如何通过C#发送Post,方法如下:

            XElement Post(XElement XmethodCall)
            {
                WebRequest req = WebRequest.Create(strXmlRpc);//strXmlRpc是XML-RPC Server的地址,例如:我的就是http://www.iron-feet.cn/xmlrpc.php
                req.ContentType = "application/x-www-form-urlencoded";
                req.Method = "POST";
                byte[] bytes = System.Text.Encoding.ASCII.GetBytes(XmethodCall.ToString());
                req.ContentLength = bytes.Length;
     
                System.IO.Stream os = req.GetRequestStream();
                os.Write(bytes, 0, bytes.Length);
                os.Close();
                System.Net.WebResponse resp = req.GetResponse();
     
                System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
     
                XElement tempX=XElement.Parse(sr.ReadToEnd().Trim());
     
                var query = tempX.Elements("fault").Elements("value").Elements("struct").Elements("member").Elements("name");
                foreach (XElement x in query)
                {
                    if (x.Value == "faultString")
                    {
                        throw new Exception(x.Parent.Elements("value").First().Value);
                    }
                }
     
                if (tempX.Name.ToString()== "methodResponse")
                {
                    return tempX;
                }
                else
                {
                    throw new Exception("This is not an XML-RPC server!");
                }
     
            }

    小小的介绍结束了。

  • 相关阅读:
    内存映射
    docstring show under decorator
    eventlet dbpool for postgresql &mysql
    za python
    Install MySQL 5.0 Max on FC3
    vi
    ff chrome tips
    20101004网站部署更新
    sqlalchemy type &elixir type
    20100930网站部署更新日志
  • 原文地址:https://www.cnblogs.com/Huayuan/p/2598060.html
Copyright © 2011-2022 走看看