2017-09-13 143 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。 –