python - wp.​​uploadFile xmlrpc 来自 python 编码 base64

标签 python wordpress xml-rpc encode

我正在尝试在 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/

相关文章:

php - 在 Woocommerce 中的产品自定义循环上启用 Ajax 添加到购物车按钮

ios - 来自 iOS App 新帖子的 XMLRPC

python - Wordpress xmlrpc SSL 证书错误(仅在 1 台机器上)

php - WordPress 多站点(启用网络)

javascript - WordPress 插件“订阅评论已重新加载”: Loading Scripts Only When it is Necessary

c# - Web 服务需要 Python 列表作为参数。需要从C#调用

python - Jupyter Notebook 中未显示 Plotly Sunburst 图

python - 从先前终止的连接到数据库提交 SQLite 中的现有日志文件

python - os.environ 没有看到一些变量

python - 添加分数类 python