python请求模块发布到PHP脚本

时间:2014-06-05 09:45:00

标签: php python post https python-requests

我需要将一些.csv文件上传到自签名的https apache服务器。 我的https服务器正在运行PHP。我的客户端正在运行python脚本将文件POST到https服务器。 PHP.ini有10M for 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);

?>

my apache error.log报告以下PHP通知

[Thu Jun 05 09:35:19.120760 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP警告:在未知的多部分/表格数据POST数据中缺少边界第0行

[Thu Jun 05 09:35:19.124625 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP注意:未定义的索引:/ var / www / html / file_upload中的文件第8行的.php

[Thu Jun 05 09:35:19.124673 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP注意:未定义的索引:/ var / www / html / file_upload中的文件第11行的.php

[Thu Jun 05 09:35:19.124686 2014] [:error] [pid 8030] [client xxx.xxx.xxx.xxx:49207] PHP注意:未定义的索引:/ var / www / html / file_upload中的文件第12行的.php

权限 我的www文件夹是chown -R www-data.www-data

1 个答案:

答案 0 :(得分:0)

以下是解决方案:

如果要使用python模块上传文件,请按以下方式读取文件:

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

现在在接收PHP文件中,必须使用$ _FILES变量,如下所示:

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

$ _FILES索引的名称基本上是你在python中读取文件名时给出的标签的名称。