重新提交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>
<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>
请求地址更改为
http://blog.csdn.net/froole/services/metablogapi.aspx返回结果仍旧是错误:
值不能为空。
参数名: input
为何你不使用提供的标准格式呢?我不使用任何外部工具,使用手工拼装xml,然后通过URLConnection进行Post提交都运行成功了。如果使用axis之类的生成客户端就更简单了。
我用的是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头信息给我分析一下,
例子就可以,让我自己找找原因。
// 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 };