我正在尝试在 wordpress 上使用 xmlrpc 上传文件。我已经使用 php 完成了此操作,但这次我必须使用 python,但有些东西不起作用。
更具体地说,执行此操作的方法是调用 xmlrpc 函数 wp.uploadFile,在此处的 codex 中进行了说明 http://codex.wordpress.org/XML-RPC_wp#wp.uploadFile或 metaWeblog.newMediaObject。问题是编码。从 php 我使用了一个正在做肮脏工作的类。即显然可以解决问题的 ixr_base64 类。在 python 中,我尝试导入 base64lib 并使用它的 b64encode 函数,但没有成功。
更具体地说,这是我正在使用的 python 代码:
import xmlrpclib
import urllib2
import base64
def get_url_content(url):
try:
content = urllib2.urlopen(url)
return content.read()
except:
print 'error!'
file = get_url_content('http://www.legaljuice.com/Fly.jpg')
file = base64.b64decode(file)
server = xmlrpclib.Server('http://localhost/xmlrpc.php')
xarr = ['1', 'admin', 'pass', {'name':'sssaaa.jpg', 'type':'image/jpeg', 'bits':file, 'overwrite':'true'}]
result = server.metaWeblog.newMediaObject(xarr)
print result
它并没有起到作用。它在 wordpress 端没有正确解码。现在,我知道这不是 wordpress 的错,因为我之前用 php 做过这个,并且有大量应用程序、android、ios、桌面和 web 使使用 xmlrpc 的文件上传成为可能。
根据我的研究,带有 base64 模块的 python 提供了 RFC 3548 中指定的数据编码和解码,而带有 base64_encode 的 php 使用的是 RFC 2045 第 6.8 节 在这一点上,我被卡住了。我已经尝试了一切,但到目前为止没有任何效果。我刚刚在 wordpress 的媒体页面上收到损坏的文件。
如果可以,请帮忙。
最佳答案
好的,答案就在 xmlrpclib 类中。 要从 python 将 base64 位发送到 wordpress,您需要像这样使用 xmlrpclib 类:
base64bits = xmlrpclib.Binary(file_content)
然后您只需将 base64bits 变量添加到 wp.uploadFile xmlrpc 请求中的“位”参数。
更准确地说,这里是完整的 python 代码,说明如何完成此操作:
import xmlrpclib
import urllib2
from datetime import date
import time
def get_url_content(url):
try:
content = urllib2.urlopen(url)
return content.read()
except:
print 'error! NOOOOOO!!!'
file_url = 'http://the path to your picture'
extension = file_url.split(".")
leng = extension.__len__()
extension = extension[leng-1]
if (extension=='jpg'):
xfileType = 'image/jpeg'
elif(extension=='png'):
xfileType='image/png'
elif(extension=='bmp'):
xfileType = 'image/bmp'
file = get_url_content(file_url)
file = xmlrpclib.Binary(file)
server = xmlrpclib.Server('http://website.com/xmlrpc.php')
filename = str(date.today())+str(time.strftime('%H:%M:%S'))
mediarray = {'name':filename+'.'+extension,
'type':xfileType,
'bits':file,
'overwrite':'false'}
xarr = ['1', 'USERHERE', 'PASSWORDHERE', mediarray]
result = server.wp.uploadFile(xarr)
print result
关于python - wp.uploadFile xmlrpc 来自 python 编码 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301446/