簡體   English   中英

將Python POST文件轉換為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只是命令行上提供的字符串,可能很重要; 它不是文件本身。 我認為這是問題所在。 我在params ['name']中發送文件名字符串,並在params ['data']中發送其內容 如何發送文件,就像從Web表單以交互方式提交文件一樣,並將其保存在params ['file']中? 這是我需要做的嗎?

===編輯===
除了導入的模塊,我無法使用任何模塊。 感謝您的替代建議,例如“請求”。

您可能不需要在參數中指定數據,而只需指定一個文件對象。 嘗試

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

暫無
暫無

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

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