Python POST File To PHP


Python POST File To PHP

我有一个带有jQuery和jqGrd Web应用程序的PHP;该应用程序的功能之一是能够上传文件(在客户端由jqGrid处理(并将内容插入数据库。 这一切都有效。 我的问题是我还需要为手动(或自动(文件上传提供命令行机制。 所以我有以下 Python 代码。 代码成功登录到我的 API,我可以在 PHP 中看到我的 POST 数据,但我在处理文件时出错。

我需要以与通过 Web 界面相同的方式发布文件......这导致 PHP 的 $_FILES 被填充。 不过,我的代码低于 $_FILES 是空的。 不知道我错过了什么。

import base64
import cookielib
import getopt
import os
import sys
import urllib
import urllib2
import MultipartPostHandler
...code to process command line args, log into api, get sessionId...
#
# import
#
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
headers = {'Cookie': 'PHPSESSID=' + sessionId}
params = {
    'action': 'import', 
    'import': 'api', 
    'file': sourceFile, 
    'data': base64.b64encode(open(sourceFile, "rb").read()), 
    'id': id
}
urllib2.install_opener(urllib2.build_opener(MultipartPostHandler.MultipartPostHandler))
response = urllib2.urlopen(urllib2.Request(api, params, headers))
print response.read()

知道 sourceFile 只是命令行上提供的字符串可能很重要;它不是文件本身。 我认为这就是问题所在。 我正在以参数['名称']发送文件名字符串,并在参数['数据']中发送其内容。 如何发送文件,就像从 Web 表单以交互方式提交文件并将其保存在 params['file'] 中一样? 这是我需要做的吗?

=== 编辑 ===
我不能使用任何模块,只能使用我导入的模块。 感谢您的替代建议,例如请求。

您可能不需要在参数中指定数据,而只需提供一个文件对象即可。

尝试
params = {
    'id':'id',
    'file':open(sourceFile, 'rb')
}