重新提交XML信息,上面的太恶心了<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param>
<value>froole</value>
</param>
<param>
<value>froole</value>
</param>
<param>
<value>密码</value>
</param>
<param>
<value>
<struct>
<member>
<name>title</name>
<value>测试</value>
</member>
<member>
<name>source</name>
<value>
<struct>
<member>
<name>name</name>
<value>testName</value>
</member>
<member>
<name>url</name>
<value>test url</value>
</member>
</struct>
</value>
</member>
<member>
<name>enclosure</name>
<value>
<struct>
<member>
<name>length</name>
<value>
<i4>100</i4>
</value>
</member>
<member>
<name>type</name>
<value>aa</value>
</member>
<member>
<name>url</name>
<value>aa</value>
</member>
</struct>
</value>
</member>
<member>
<name>link</name>
<value>http://www.loveapple.cn</value>
</member>
<member>
<name>userid</name>
<value>froole</value>
</member>
<member>
<name>description</name>
<value>测试</value>
</member>
<member>
<name>dateCreated</name>
<value>
<dateTime.iso8601>20080822T17:34:03
</dateTime.iso8601>
</value>
</member>
<member>
<name>permalink</name>
<value>http://www.froole.net</value>
</member>
<member>
<name>categories</name>
<value>
<array>
<data>
<value>测试</value>
</data>
</array>
</value>
</member>
</struct>
</value>
</param>
<param>
<value>
<boolean>1</boolean>
</value>
</param>
</params>
</methodCall>

解决方案 »

  1.   

    更正一下,
    请求地址更改为
    http://blog.csdn.net/froole/services/metablogapi.aspx返回结果仍旧是错误:
    值不能为空。
    参数名: input
      

  2.   

    我晕,我竟然今天才看到,还是从OpenAPI那面过来的。我不知道你是怎么调用的,但是我在OpenAPI里面没有用过你说的调用方法。
    为何你不使用提供的标准格式呢?我不使用任何外部工具,使用手工拼装xml,然后通过URLConnection进行Post提交都运行成功了。如果使用axis之类的生成客户端就更简单了。
      

  3.   

    谢谢斑竹回答。
    我用的是Apache的XML-RPC代码是这样的
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;import org.apache.xmlrpc.client.XmlRpcClient;
    import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;/**
     * @author loveapple
     * @since 2008/08/13
     * @version $Revision:$
     */
    public class TestCSDNAPI { /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception{
    XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();

    config.setServerURL(new URL("http://blog.csdn.net/froole/services/metablogapi.aspx"));
    config.setEnabledForExtensions(false); XmlRpcClient client = new XmlRpcClient();
    client.setConfig(config);


    String blogid = "froole";
    String username = "froole";
    String password = "密码";
    Boolean publish = true;
    Map<String, Object> enclosure = new HashMap<String, Object>();
    enclosure.put("length", new Integer(100));
    enclosure.put("type", "aa");
    enclosure.put("url", "aa");
    Map<String, Object> source = new HashMap<String, Object>();
    source.put("name", "testName");
    source.put("url", "test url");
    Map<String, Object> post = new HashMap<String, Object>();
    post.put("dateCreated", new Date());
    post.put("description ", "测试内容");
    post.put("title", "测试标题");
    List categoryList = new ArrayList();
    categoryList.add("测试");
    post.put("categories", categoryList);
    post.put("enclosure", enclosure);
    post.put("link", "http://www.loveapple.cn");
    post.put("permalink ", "http://www.froole.net");
    post.put("source", source);
    post.put("userid", "froole");

    Object[] param = new Object[]{blogid, username, password, post, publish};

    Map param2 = new HashMap();
    param2.put("blogid", blogid);
    param2.put("username", username);
    param2.put("password", password);
    param2.put("post", post);
    param2.put("publish", publish);
    //Object[] param = new Object[]{param2};

    Object result =  client.execute("metaWeblog.newPost", param);
    System.out.println(result);
    }}执行后,返回结果总是给个错误,具体内容如下
    HTTP/1.1 200 OK
    Date: Tue, 26 Aug 2008 01:19:51 GMT
    Server: Microsoft-IIS/6.0
    X-Powered-By: ASP.NET
    X-AspNet-Version: 2.0.50727
    Cache-Control: private
    Content-Type: text/xml
    Content-Length: 454<?xml version="1.0"?>
    <methodResponse>
      <fault>
        <value>
          <struct>
            <member>
              <name>faultCode</name>
              <value>
                <i4>0</i4>
              </value>
            </member>
            <member>
              <name>faultString</name>
              <value>
                <string>值不能为空。
    参数名: input</string>
              </value>
            </member>
          </struct>
        </value>
      </fault>
    </methodResponse>另外,发送的HTTP头信息如下:
    [code=BatchFile]POST /froole/services/metablogapi.aspx HTTP/1.1
    Content-Type: text/xml
    User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport)
    Content-Length: 1296
    Cache-Control: no-cache
    Pragma: no-cache
    Host: blog.csdn.net
    Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
    Connection: keep-alive
    [/code]
    斑竹能不能把使用axis发送请求的HTTP头信息给我分析一下,
    例子就可以,让我自己找找原因。
      

  4.   

    你的使用的网络是否有nat穿越, 如果有nat穿越,可能会修改http的头
      

  5.   

    貌似你的 params 参数拼装不符合api 你可以具体查看下。我这个是用的blogjava的api
    // Set up parameters required by newPost method
            Map<String, String> post = new HashMap<String, String>();
            post.put("title", "Hello, Blog!");
            post.put("link", "http://www.vonhagen.org/");
            post.put("description", "This is the content of a trivial post.");
            Object[] params = new Object[] { "1", "username", "password", post, Boolean.TRUE };