簡體   English   中英

python請求模塊發布到PHP腳本

[英]python requests module post to php script

我需要將一些.csv文件上傳到自簽名的https apache服務器中。 我的https服務器正在運行PHP。 我的客戶端正在運行python腳本,以將文件發布到https服務器中。 PHP.ini有20M用於upload_file和POST_max_size指令,沒有多余的空格。 我需要上傳的文件只有4千字節

我的python腳本:

import requests
username = "user"
password = 'password'
myfile = "/full/path/to/myfile.csv"
url = "https://www.mydomain.com/file_upload.php"

files = {'file': open(myfile, 'rb')}

r = requests.post(url, files=files, auth=(username, password), verify=False)
print r.text
print r.status_code

我收到狀態碼200,但文件不在目標服務器中,我認為錯誤在我的file_upload.php中

$ _FILES ['userfile'] ['name']是我從HTML表單發布文件時使用的名稱,現在不再如此。 我相信由於我對PHP中的$ _FILES變量缺乏理解而錯過了一些東西- 當不從表單發布時,文件ID應該是什么樣子?

<?php

$uploaddir = '/var/www/html/uploads/';
$uploadfile = $uploaddir . basename($_FILES['file-id']['name']);

move_uploaded_file($_FILES['file-id']['tmp_name'], $uploadfile);
error_log(print_r($_FILES['file-id']['error']), 3, $error_log_file);

?>

我的Apache error.log報告以下PHP通知

[2014年6月5日星期四09:35:19.120760] [:錯誤] [pid 8030] [客戶端xxx.xxx.xxx.xxx:49207] PHP警告:第0行上的多部分/表單數據POST數據缺少邊界

[2014年6月5日星期四09:35:19.124625] [:錯誤] [pid 8030] [客戶端xxx.xxx.xxx.xxx:49207] PHP注意:未定義的索引:在/var/www/html/file_upload.php中的文件8號線

[2014年6月5日星期四09:35:19.124673] [:錯誤] [pid 8030] [客戶端xxx.xxx.xxx.xxx:49207] PHP注意:未定義的索引:在/var/www/html/file_upload.php中的文件11行

[2014年6月5日星期四09:35:19.124686] [:錯誤] [pid 8030] [客戶端xxx.xxx.xxx.xxx:49207] PHP注意:未定義的索引:在/var/www/html/file_upload.php中的文件12行

權限我的www文件夾是chown -R www-data.www-data

解決方法如下:

當您想使用python模塊上傳文件時,請按照以下說明讀取文件:

files = {'testname': open(myfile, 'rb')}

現在,在接收PHP文件中,必須按如下方式使用$ _FILES變量:

$uploadfile = $uploaddir . basename($_FILES['testname']['name']);
move_uploaded_file($_FILES['testname']['tmp_name'], $uploadfile);

基本上,$ _FILES索引的名稱是在python中讀取文件名時所給標簽的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM