2017-09-13 140 views
0

为了验证WordPress实例的安装,我们正在编写Python单元测试。其中一项测试应执行以下操作:将图像上传到WordPress。通过Python的请求将图像上传到WordPress

为了做到这一点,我使用了请求库。

当我通过Firebug的检查/wp-admin/media-new.php页面内的表格(表格信息,我得到以下信息): 形式 编号:文件的形式 名称 方法:发布 行动:http://localhost:8000/wp-admin/media-new.php

元素 ID:plupload-浏览按钮 类型:按钮 值:选择文件

ID:异步上传 名称:异步上传 类型:FIL Ë 标签:上传

ID:HTML上传 名称:HTML上传 类型:提交 值:上传

ID:POST_ID 名称:POST_ID 类型:隐藏 值:0

ID:_wpnonce 名称:_wpnonce 类型:隐藏 值:c0fc3b80bb

ID:FI LE-形式 名称:_wp_http_referer 类型:隐藏 值:/wp-admin/media-new.php

我相信_wpnonce是每个会话生成一个唯一的值。因此,在尝试上传文件之前,我得到了media-new.php页面,并在窗体中获取_wpnonce(因此我的代码中的变量)。

我的代码如下:

with open('1.jpg', 'rb') as f: 
     upload_data = {'post_id': '0', 
         '_wp_http_referer': '/wp-admin/media-new.php', 
         '_wpnonce': wp_nonce, 
         'action': 'upload_attachement', 
         'name': '1.jpg', 
         'async-upload': f, 
         'html-upload': 'Upload'} 
     upload_result = session.post('http://localhost:8000/wp-admin/media-new.php', upload_data) 

的代码运行正常和upload_result.status_code等于200

然而,像从来没有在WordPress的媒体库显示出来。

我相信这是一个简单的错误,但我无法弄清楚我错过了什么。

在此先感谢您的帮助。

+0

我认为这[链接](https://wordpress.stackexchange.com/questions/240487/media-files-exist-in-upload-文件夹但不显示)将帮助你。检查上传文件夹的权限。 – abhijit

回答

0

如果你想发布文件,你应该使用files参数。另外'_wpnonce'的价值还不足以获得认证,您需要拥有cookie。

url = 'http://localhost:8000/wp-admin/media-new.php' 
data = { 
    'post_id': '0', 
    '_wp_http_referer': '/wp-admin/media-new.php', 
    '_wpnonce': wp_nonce, 
    'action': 'upload_attachement', 
    'html-upload': 'Upload' 
} 
files = {'async-upload':('1.jpg', open('1.jpg', 'rb'))} 
headers = {'Cookie': my_cookies} 
upload_result = session.post(url, data=data, files=files, headers=headers) 

我假设您从浏览器中获取了有效的cookie。如果你想得到requests验证我的回答这个职位:login-wordpress-with-requests

+0

谢谢,它确实有效。但是,我不需要cookie。我相信自从我还在同一场会议以来,我不需要他们。 – Jaepetto

+0

是的,如果你有一个认证会话,你不需要担心cookie。 –