- 浏览: 2962390 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (2529)
- finance (1459)
- technology (218)
- life (343)
- play (150)
- technology-component (0)
- idea (6)
- house (74)
- health (75)
- work (32)
- joke (23)
- blog (1)
- amazing (13)
- important (22)
- study (13)
- Alternative (0)
- funny (8)
- stock_technology (12)
- business (16)
- car (21)
- decorate (4)
- basketball (2)
- English (16)
- banker (1)
- TheBest (1)
- sample (2)
- love (13)
- management (4)
最新评论
-
zhongmin2012:
BSM确实需要实践,标准ITIL服务流程支持,要做好,需要花费 ...
BSM实施之前做什么 -
shw340518:
提示楼主,有时间逻辑bug:是你妈二十那年写的 那会儿连你爹都 ...
80后辣妈给未来儿子的信~我的儿,你也给我记住了~~~ -
guoapeng:
有相关的文档吗?
it项目管理表格(包含146个DOC文档模板) -
solomon:
看到的都是 这种 CTRL+C 和 CTRL+V 的文章, ...
Designing a website with InfoGlue components -
wendal:
恩, 不错. 有参考价值
Designing a website with InfoGlue components
Python的xmlrpc
调
试 --------------------------------cnblogs调试:首先遇到:
pyblog.BlogError:
request contains array value where string expected [request :
parameter
1]
修改xmlrpc
模
块代码,client.py中的编码类Marshaller增加一个array2方法,并且把tuple的处理改成它。(修改后向WordPress新发
布文章仍然正常。) def dump_array2(self, value, write):
i =
id(value)
if i in self.memo:
raise
TypeError("cannot marshal recursive sequences")
self.memo[i] =
None
dump = self.__dump
write("<value><data>\n")
for v in value:
dump(v, write)
write("</data></value>\n")
del self.memo[i]
def dump_array(self, value, write):
i = id(value)
if i in self.memo:
raise
TypeError("cannot marshal recursive sequences")
self.memo[i] =
None
dump = self.__dump
write("<value><array><data>\n")
for v in
value:
dump(v, write)
write("</data></array></value>\n")
del
self.memo[i]
dispatch[tuple] = dump_array2
dispatch[list] =
dump_array2
<!-- WizHtmlContent-->则,参数类型不匹配的告警没了,但是有参数个数不匹配告警。
pyblog.BlogError:
Parameter count
mismatch.---------------------------------------------------------
cnblogs:
print(blog.method_signature('metaWeblog.newPost'))[['string',
'string', 'string', 'string', 'struct', 'boolean']]
drupal:
['string',
'string', 'string', 'string', 'struct', 'boolean']
pyblog.BlogError:
Server error. Wrong number of method parameters.
而实际上传输的内容:
cnblogs:
POST
/sinojelly/services/metablogapi.aspx HTTP/1.1
Host: www.cnblogs.
com
Accept-Encoding:
identity
Content-Length: 518
Content-Type: text/xm
l
User-Agent:
xmlrpclib.py/1.0.1 (by www.pythonware.com)
<?xml version
='1.0'?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<
param>
<value><data>
<value><int>1</int></value>
<value><string>sinojelly</st
ring></value>
<value><string>87345465</string></value>
<value><struct>
<membe
r>
<name>description</name>
<value><string>Test
description4</string></value>n</member>
<member>
<name>title</name>
<value><string>Test
article3</string><
/value>
</member>
</struct></value>
<value><boolean>1</boolean></value>
</da
ta></value>
</param>
</params>
</methodCall>
向
drupal发送的数据:
POST /xmlrpc
.php HTTP/1.1
Host: sinojelly.dreamhosters.com
Accept-
Encoding:
identity
Content-Length: 514
Content-Type: text/xml
User-Agen
t:
xmlrpclib.py/1.0.1 (by www.pythonware.com)
<?xml
version='1.0'?>
<met
hodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param>
<value
><data>
<value><int>1</int></value>
<value><string>admin</string></value>
<va
lue><string>87345465</string></value>
<value><struct>
<member>
<name>descript
ion</name>
<value><string>Test
description4</string></value>
</member>
<membe
r>
<name>title</name>
<value><string>Test
article3</string></value>
</member>
</struct></value>
<value><boolean>1</boolean></value>
</data></value>
</par
am>
</params>
</methodCall>
向
51CTO发送的数据:
POST /xmlrpc
.php HTTP/1.1
Host: sinojelly.blog.51cto.com
Accept-En
coding:
identity
Content-Length: 518
Content-Type: text/xml
User-Agent:
xmlrpclib.py/1.0.1
(by www.pythonware.com)
<?xml version='1.0'?>
<metho
dCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param>
<value><
data>
<value><int>1</int></value>
<value><string>sinojelly</string></value>
<
value><string>87345465</string></value>
<value><struct>
<member>
<name>descri
ption</name>
<value><string>Test
description4</string></value>
</member>
<mem
ber>
<name>title</name>
<value><string>Test
article3</string></value>
</membe
r>
</struct></value>
<value><boolean>1</boolean></value>
</data></value>
</p
aram>
</params>
</methodCall>
WLW
向51CTO发布成功的报文:
POST http://sinojelly.blog.51cto.com/xmlrpc
.php HTTP/1.1
Accept:
*/*
Accept-Language: zh-CN, en-US, en, *
User-Agent: Mozilla/4.0
(compatible; MSIE 8.0; Windows NT 6.1; Windows Live Writer 1.0)
Content-Type:
text/xml
Host: sinojelly.blog.51cto.com
Content-Length: 950
Connection:
Close
<?xml version="1.0" encoding="gb2312"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param>
<value>
<string>479153</string>
</value>
</param>
<param>
<value>
<string>sinojelly</string>
</value>
</param>
<param>
<value>
<string>87345465</string>
</value>
</param>
<param>
<value>
<struct>
<member>
<name>title</name>
<value>
<string>Just Test.</string>
</value>
</member>
<member>
<name>description</name>
<value>
<string><p>Just Test wlw
post.</p></string>
</value>
</member>
<member>
<name>categories</name>
<value>
<array>
<data />
</array>
</value>
</member>
</struct>
</value>
</param>
<param>
<value>
<boolean>1</boolean>
</value>
</param>
</params>
</methodCall>
---------------------------------
修
改了xmlrpc
库
的client.py,改变了参数组织方式,使之像WLW捕获的那样有规律。
然后就已经支持:WordPress、cnblogs
注意:
1、
cnblogs必须指定blogid为字符串参数。如:blogid = "1"
---------------------------------51CTO
的xmlrpc
做
得很不标准,而且附加要求多。暂时还不能支持。调试中发现51CTO的几个问题:
1、经常会报告密码错误。(其实可能不是密码问题,当然也许与
blogid正确指定有关。通过wlw发布可以得到正确的blogid。)
2、发布后返回中文的错误码。中文打印的是UTF8编码。抽时间把打印
改下也许可以看到。估计是原创类型等未选择所致。3、查询分类列表也返回中文,而python对中文解析有问题,就报告xml不是良结构错误。
-----------------------------------vshare发布的时候有奇怪错误:
r =
getattr(self.server, methodname)(args)
File "C:\Python31\lib\xmlrpc
\client.py",
line 1027, in __call__
return self.__send(self.__name, args)
File "C:\Python31\lib\xmlrpc
\client.py", line 1269, in __request
verbose=self.__verbose
File "C:\Python31\lib\xmlrpc
\client.py",
line 1068, in request
return self.parse_response(resp)
File
"C:\Python31\lib\xmlrpc
\client.py", line 1167, in parse_response
return u.close()
File "C:\Python31\lib\xmlrpc
\client.py", line 671,
in close
raise Fault(**self._stack[0])
xmlrpc
.client.Fault:
<Fault 0: '未将对象引用设置到对象的实例。'>
----------------------------------------
csdn:
xmlrpc
.client.Fault:
<Fault 0: '春节期间暂时关闭MetaAPI服务。'>
-----------------------------------------
cnblogs:
目
前不能支持category的文章发布。会遇到下面问题。
能够支持WordPress带category的发布,但是category不能生效。
cnblogs:
带上categories。
blog = pyblog.WordPress(posturl, username, password)
content
= {"description":'Test description5', "title":'Test article5',
"categories": u.split_to_list('【创作类型】:原创;IT生活-休闲', ';', '')}
blog.new_post(content,
blogid = "1") #blogid = "479153")#
xmlrpc
.client.Fault:
<Fault 0: 'request contains struct member categories with m
issing
value [request : parameter 4 : struct mapped to type Post]'>
categories
不应该再有param标签:<member>
<name>categories</name>
<param>
<value><string>??????????xb1???????:??????</string></value>
</param>
<param>
<value><string>IT????′?-???é?2
</string></value>
</param>
</member>
-------------------------------------------
图
片有格式的可能无法上传。
修改正则表达式,多加了一个.*?,问题解决。看起来无须匹配后面的>,可以再去掉一个.*?。顺手优化掉了。
如
下这种图片不能上传:
target=_blank><IMG
style="BORDER-RIGHT-WIDTH:
0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH:
0px"
title=nothing alt=""
src="WizDocument_53ecc76c3e3b661e1f9491be46d2e51d_files/nothing_550x477[1].jpg"
width=550
height=477></A></P>
--------------------------------------------
支
持cnblogs修改的xmlrpc
位置:
write("<value><array><data>\n")
for v in
value:
dump(v, write)
write("</data></array></value>\n")
修改后: for v
in value:
write("<param>\n")
dump(v, write)
write("</param>\n")
----------------------------------------------------
一
直努力的目标终于达到了,博文发布工具支持发布文章到cnblogs。
这几天,由对xmlrpc
一窍不通,Python半调子,一直为了这个目标
努力奋斗,发现Python 3.1库中若干问题,最终修改Python 3.1库的xmlrpc
库client.py文件,支持了cnblogs
的文章发布。
这个过程中也体会到了异常处理与普通错误码判断相比的优势。
----------------------------------------------------Drupal
认为11是content type。
WLW也是一样的情况,它虽然只指定博客主页地址,检测出了日志发布接口,但发布的时候设置blogid为
1,也同样出错。
估计是这个drupal版本有问题。Traceback (most recent call last):
File "BatchBlogPost\BlogPost.py", line 378, in <module>
blog.new_post(content, blogid = "11") #blogid = "479153")#
File
"D:\Users\Desktop\Recent\BatchBlogPost\pyblog.py", line 197, in new_post
return self.execute('metaWeblog.newPost', blogid, self.username,
self.passwo
rd, content, publish)
File
"D:\Users\Desktop\Recent\BatchBlogPost\pyblog.py", line 140, in execute
raise BlogError(fault.faultString)
pyblog.BlogError: Blog API module
is not configured to support the 11 content ty
pe, or you don't have
sufficient permissions to post this type of content.
-------------------------------------------------------
解
决了WordPress分类无法生效的问题:
正确的消息交互如下:
正确代码如
下:
第一次进行参数编码时,传入的是tuple(即:“()”),categories参数是list(即:"[]"),所以它们是完全可以区分
的。xmlrpc
库
没有作区分。
def dump_array(self, value, write):
i =
id(value)
if i in self.memo:
raise
TypeError("cannot marshal recursive sequences")
self.memo[i] =
None
dump = self.__dump
for v in value:
write("<param>\n")
dump(v, write)
write("</param>\n")
del self.memo[i]
dispatch[tuple] = dump_array
def dump_list(self, value, write):
i = id(value)
if i in self.memo:
raise
TypeError("cannot marshal recursive sequences")
self.memo[i] =
None
dump = self.__dump
write("<value><array><data>\n")
for v in
value:
dump(v, write)
write("</data></array></value>\n")
del
self.memo[i]
dispatch[list] = dump_list
-----------------------------------------------------------
分
类问题解决后,再尝试一下51CTO,同时修改了py文件支持中文(昨天不支持中文)。
必须有的分类,选取两个:【创作类型:原创】;开发技术
-Web开发
~~~~~~~~~~
代码中增加# coding=cp936之后,出现异常:
SyntaxError:
encoding problem: utf-8
改为:# coding=utf-8
之后,OK了。(用记事本修改coding,保存。直接在PyScripter中改可能有问题。)
最后的测试结果,51CTO博客发布OK。
但
是有点小问题,我写的是原创,但发布后显示为转载。
-----------------------------------------------------------
Ethereal
好像只抓取了报文头,不能显示报文体。
从Fiddler能看到报文和二进制数据:
下面是WLW
editPost的结果(能看到categories信息)
下面是WLW
newPost的结果(看到的categories信息为空):
<member>
<name>categories</name>
<value>
<array>
<data />
</array>
</value>
</member>
如果我在Python中发布时也使用空的
categories,必定发送不成功,返回结果我猜想是“请选择原创类型”。
后来我突然发现,
WLW中的编码是:
<?xml
version="1.0" encoding="gb2312"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
而
Python发布时采用的是默认的utf-8。
于是,把编码改为gb2312,果然,再使用“”分类,发布的文章就是原创的了。
xmlrpc
.client.ServerProxy(serverapi,
encoding='gb2312', verbose=1)
注意:.py文件编码也要改为gb2312,改之后很容易遇到下面异常。
这
是由于BOM编码引起的,新建txt文件,用记事本把正确代码贴进去,注意写上gb2312,保存,就OK乐。
D:\Users\Desktop\Recent>python
BatchBlogPost\BlogPost.py
File "BatchBlogPost\BlogPost.py", line 2
SyntaxError:
encoding problem: utf-8
发表评论
-
New Enterprise Security Solutions
2011-09-13 15:46 0<!-- [if !mso]> <styl ... -
ES Announces Enterprise Security Solutions
2011-09-13 15:40 0<!-- [if !mso]> <styl ... -
linux下如何将文件打包、压缩并分割成制定大小?
2010-09-15 18:52 3317将大文件或目录打包、 ... -
rhel4 yum安装, 使用
2010-09-07 16:37 0第一种方法: yum源来自chinalinuxpub.com ... -
Windows: 远程自动安装程序
2010-08-26 15:48 1107问题的提出 作为 ... -
Oracle体系结构
2010-08-07 09:53 1043Oracle体系结构 Oracle Server包括Oracl ... -
ocp sesson 3
2010-07-31 14:39 0show parameter undo 只有 默认情况下服务 ... -
ocp session 2
2010-07-25 17:00 0/home/oracle/raInventory/orains ... -
ocp session 1
2010-07-24 13:02 0ocp first lesson D:\oracle_cou ... -
mdadm使用详解及RAID 5简单分析
2010-07-11 16:19 1398http://blog.csdn.net/chinalinux ... -
Linux的lvm的基本配置步骤
2010-07-11 14:53 12901.增加硬件 增加的ide硬盘前缀为hd,scs ... -
OCP study material
2010-07-11 13:52 0\\192.168.1.105watch -n 1 'stat ... -
apache+python+mod_python+django 编译安装指南
2010-06-24 17:25 14761、本文将知道你在 linux 下使用源码包安装 ... -
在ubuntu下配置apache运行python脚本
2010-06-22 16:11 2277常用的简单命令 sudo apt ... -
Python 2.5 Quick Reference
2010-06-21 11:18 1472... -
shell 面试题汇集
2010-06-10 19:50 1066利用 top 取某个进程的 CPU 的脚本 : ... -
shell程序面试题
2010-06-10 19:48 29311.要求分析Apache访问日志,找出里面数量在前面100位的 ... -
EMC技术支持工程师笔试部分试题回忆
2010-06-07 15:16 1654要查看更多EMC公司笔经相关信息,请访问EMC公司校园招聘CL ... -
linux shell 条件语句
2010-06-03 23:29 1798... -
删除所有表的所有记录(MSSQL)
2010-05-25 14:20 1571昨天对一测试库要删除所有记录后生成一个备份 ...
相关推荐
XMLRPC(XML Remote Procedure Call)是一种基于HTTP协议的远程调用技术,它允许客户端通过发送XML格式的数据到服务器,...通过运行和调试这两个示例,你可以更深入地理解XMLRPC通信的细节,以及如何在实际项目中应用。
xmlrpc-c-1.51.05.tgz,xmlrpc的c和c++官方发布版本,xmlrpc用于嵌入式API调试,配合python客户端,非常方便。
这个 MSI 安装包会包含 Python 解释器、标准库以及必要的开发工具,使得用户可以在自己的机器上编写、运行和调试 Python 代码。 安装 Python 2.7.3 之后,你可以使用 `python` 命令行启动解释器,编写 `.py` 脚本...
11. **异常处理和调试**:traceback模块用于追踪和打印错误堆栈,pdb模块提供了交互式的源代码调试器。 12. **编码和解码**:codecs模块提供了各种编码和解码的函数,如UTF-8、ASCII等。 13. **加密和安全**:...
10. **调试和性能分析模块**:如`pdb`(Python调试器)、`timeit`(性能测试)。 11. **科学计算和数据分析模块**:如`numpy`(数值计算)、`pandas`(数据处理)和`matplotlib`(数据可视化)。 12. **Web服务和...
Python是一门广泛使用的高级编程语言,以其清晰的语法和代码可读性被诸多开发者所喜爱。随着Python3.8.4版本的推出,它引入了多种新特性与改进,这极大地增强了Python的可用性和性能。本文档是针对Python3.8.4版本的...
- 调试与测试:使用如Postman等工具模拟请求,检查服务器响应,调试代码。 总的来说,Apache XML-RPC 3.1提供了一种简单而强大的方式来实现分布式系统的组件交互。通过`xmlrpc-current-bin.tar.gz.gz`安装包,你...
要开始使用或贡献这个项目,你需要有一定的编程基础,特别是对Python(因为许多XMLRPC实现都是基于Python的)和XMLRPC协议的理解。你也需要了解如何在本地环境中配置和调试软件,以及如何阅读和理解开源项目的代码...
5. **网络编程**:使用Python进行HTTP请求、XMLRPC通信或者使用其他网络协议进行数据交换。 6. **调试与测试**:如何在Ipro7或其他塞班设备上运行和调试代码,以及如何使用日志和错误处理来定位和修复问题。 7. **...
Python的异常处理机制和logging模块可以帮助开发者捕获和记录可能出现的问题,以便调试和故障排除。 6. **版本控制**:对于固件更新,版本控制是必要的。Python可以配合Git等版本控制系统,确保每次更新都有记录,...
- xmlrpc:XML-RPC服务器和客户端模块 文档中的“5.1”、“5.2”等编号可能指的是对应模块在文档中被讨论的次序。 这些信息描述了Python 3.8.5版本相较于前一版本所做的更新和改进。具体到每个模块,我们可以预想...
- XMLRPC(XML Remote Procedure Call):基于XML的远程过程调用协议,`xmlrpclib.pyc`是Python的XML-RPC客户端库。 - Cookie管理:`Cookie.pyc`可能涉及Python的Cookie模块,用于处理Web应用程序中的会话管理。 ...
技术架构方面,Windmill采用了一种名为MileHigh的架构,该架构分为几个主要部分,包括测试编写库(可以使用任何语言进行测试定义)、服务端(主要使用Python编写,并提供文件服务器、代理、JSONRPC和XMLRPC支持)、...
Python中实现客户端可能涉及使用`socket`模块来建立网络连接,以及`json`或`xmlrpc`库来处理数据序列化和反序列化,以便于和服务器交换结构化的货物信息。 2. **服务器(Server)**: 服务器接收并响应客户端的请求...
2. **工具**:ROS提供了一系列工具,如用于配置、启动、调试、可视化和包管理的工具,如`rosmaster`、`roslaunch`、`rqt`等,方便开发者工作。 3. **强大的库**:ROS包含丰富的库文件,涵盖了从移动、操作到感知的...
2. **工具集**:ROS 提供了大量工具,如配置、启动、调试、可视化和日志记录工具,帮助开发者管理和维护复杂的机器人系统。 3. **库和API**:ROS 包含丰富的库,覆盖了从机器人移动、操作控制到感知等领域的功能,...
- **脚本语言**:支持Lua、Python等脚本语言进行编程扩展。 **28. FreeSwitch的安装** - **Windows环境**:使用安装程序或手动配置。 - **Linux环境**:通过源码编译或包管理器安装。 - **编译配置**:根据...