前言:我一个月前开始学习Python,请不要对我大吼大叫:) 我有一个用PHP编写的完整开发的网站,其中包含我需要的所有功能以及在数据库中插入“stuff”的页面。我正在开发一个命令行程序来插入相同的东西并将它们发送到$ _POST数组中的PHP脚本,但我不知道如何发送文件以便它出现在$ _FILES数组中。
这是我到目前为止所做的:
我使用urllib模块发送$ _POST值,它可以正常工作
import urllib.request
import urllib.parse
data=urllib.parse.urlencode({"hello":"Yo!", "some":"AlphaBetaParkingLot"})
data=data.encode('utf_8')
request=urllib.request.Request("http://www.site.it/read_from_py.php")
f=urllib.request.urlopen(request, data)
out=f.read().decode('utf-8')
if out[0]=="1":
print("Connection acquired!")
else:
print("No connection!")
print("Exit!")
#Then actually exit!
...我通过提示选择文件对话框从本地计算机读取文件名...
from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw()
filename=askopenfilename()
...但后来我不知道如何处理文件名。我环顾四周,看不到如何将它发送到PHP中的$ _FILES。
我有一个“脏”的解决方案:用文件创建一个临时的html,然后从那里选择,但我想知道是否有更清洁的解决方案。
谢谢!
P.S。如果您想知道我是否在PHP脚本中拥有所需的所有东西,为什么我需要这个Python程序?好吧,你是对的,我不需要它,但这不取决于我......
答案 0 :(得分:0)
尝试这样
import urllib,MultipartPostHandler,urllib2,cookielib
cookies = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),MultipartPostHandler.MultipartPostHandler)
urllib2.install_opener(opener)
login = urllib.urlencode(dict(admin_user='admin',admin_pass='****'))
o=opener.open('http://some_domain_name.com/admin/index.php',login)
print o.read()
raw_params={"adtitle":"sample title",
"area":"sample area",
"addesc":"<p>sample post</p>",
"pic[0]":open("indian_eye.jpg", "rb"), #File Goes Here
"pic[1]":open("nature.jpg", "rb"),
"subcatid":"1",
"do":"post",
}
url="http://YOUR.php?cityid=15&subcatid=1"
opener.open(url, raw_params)
希望它有效!