在$ _FILES中从本地python将文件发送到远程php

时间:2013-05-21 09:58:39

标签: php python file

前言:我一个月前开始学习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程序?好吧,你是对的,我不需要它,但这不取决于我......

1 个答案:

答案 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)

希望它有效!