【问题标题】:wp.uploadFile xmlrpc from python encode base64来自 python 的 wp.uploadFile xmlrpc 编码 base64
【发布时间】:2012-03-07 06:29:42
【问题描述】:

我正在尝试在 wordpress 上使用 xmlrpc 上传文件。我已经使用 php 完成了这项工作,但这次我必须使用 python 并且有些东西不起作用。

更具体地说,执行此操作的方法是调用 xmlrpc 函数 wp.uploadFile,该函数在代码库 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 的媒体页面上收到损坏的文件。

如果可以的话,请帮忙。

【问题讨论】:

    标签: python wordpress xml-rpc encode


    【解决方案1】:

    好的,答案在于 xmlrpclib 类。 要从 python 向 wordpress 发送 base64 位,您需要像这样使用 xmlrpclib 类:

    base64bits = xmlrpclib.Binary(file_content)
    

    然后您只需将 base64bits 变量添加到 wp.uploadFile xmlrpc 请求中的 'bits' 参数即可。

    更准确地说,这是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
    

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2014-01-01
      相关资源
      最近更新 更多