通过Python的请求将图片上传到WordPress

问题描述 投票:0回答:2

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

为了做到这一点,我正在使用 Requests 库。

当我通过 Firebug 检查 /wp-admin/media-new.php 页面中的表单时(表单信息,我得到以下信息): 形式 ID:文件格式 姓名 方式:邮寄 操作:http://localhost:8000/wp-admin/media-new.php

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

id:异步上传 名称:异步上传 类型:文件 标签: 上传

id:html-上传 名称:html上传 类型: 提交 值:上传

id:post_id 名称:帖子 ID 类型:隐藏 值:0

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

id:文件格式 名称:_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 的媒体库中。

我相信这是一个简单的错误,但我不知道我错过了什么。

提前感谢您的帮助。

wordpress python-3.x python-requests
2个回答
1
投票

如果您想发布文件,您应该使用

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
投票

您可以直接使用 WordPress REST API,而不是模仿客户端中发生的情况:

在这里您可以看到如何实现文件上传:https://gist.github.com/florian-glombik/c2e71fa2128fa1a69bb39aa61fadf3bd

© www.soinside.com 2019 - 2024. All rights reserved.