首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [向java2000_net提问]关于CSDN API的使用问题,提交metaWeblog.newPost出错 [已结贴,结贴人:froole]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-22 16:50:29 楼主
    我想用Java通过XML-RPC向CSDN提交博客文章。
    参照这里的API文档:
    http://blog.csdn.net/coldwindtang/services/metablogapi.aspx

    不知道为什么,每次提交都出错。
    题诗的错误信息是:
    值不能为空。
    参数名: input


    送出的HTTP信息是这样的。
    XML code
    <?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>



    能不能给个提示,具体都缺少哪项内容?
    在使用CSDN提供的API,都需要注意哪些问题?
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:51:561楼 得分:0
    重新提交XML信息,上面的太恶心了
    XML code
    <?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>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 11:42:052楼 得分:0
    斑竹帮帮忙
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 16:36:153楼 得分:0
    更正一下,
    请求地址更改为
    http://blog.csdn.net/froole/services/metablogapi.aspx

    返回结果仍旧是错误:
    值不能为空。
    参数名: input
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • java2000_net
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

      8

    发表于:2008-08-26 06:15:104楼 得分:50
    我晕,我竟然今天才看到,还是从OpenAPI那面过来的。

    我不知道你是怎么调用的,但是我在OpenAPI里面没有用过你说的调用方法。
    为何你不使用提供的标准格式呢?

    我不使用任何外部工具,使用手工拼装xml,然后通过URLConnection进行Post提交都运行成功了。

    如果使用axis之类的生成客户端就更简单了。

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 09:23:575楼 得分:0
    谢谢斑竹回答。
    我用的是Apache的XML-RPC

    代码是这样的
    Java code
    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); } }


    执行后,返回结果总是给个错误,具体内容如下
    XML code
    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头信息如下:
    BatchFile code
    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



    斑竹能不能把使用axis发送请求的HTTP头信息给我分析一下,
    例子就可以,让我自己找找原因。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • java2000_net
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

      8

    发表于:2008-09-02 16:02:096楼 得分:0
    我也去测试一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • PrideRock
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-02 17:05:257楼 得分:50
    楼主我这里是正常的啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-03 09:40:098楼 得分:0
    读取分类表都可以正常读取到,
    就是发贴不行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • froole
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-09 13:21:299楼 得分:0
    引用 7 楼 PrideRock 的回复:
    楼主我这里是正常的啊


    能不能给我看看你发送信息的格式?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangyaosuper
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-12 19:10:4310楼 得分:0
    你的使用的网络是否有nat穿越, 如果有nat穿越,可能会修改http的头
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved