0

前言:我一个月前开始学习 Python,请不要对我大喊大叫 :)
我有一个用 PHP 编写的完整开发站点,具有我需要的所有功能,以及在数据库中插入“东西”的页面。我正在开发一个命令行程序来插入相同的内容并将它们发送到 $_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 并从那里进行选择,但我想知道是否有更清洁的解决方案。

谢谢!

PS 如果你想知道我是否在 PHP 脚本中有我需要的所有东西,我为什么需要这个 Python 程序?好吧,你是对的,我不需要它,但这不取决于我......

4

1 回答 1

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)

希望它有效!

于 2013-05-21T10:06:03.480 回答