2013-05-21 33 views
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與一個形式只是與該文件,並從那裏選擇,但我想知道是否有一個更乾淨的解決方案。

謝謝!

P.S.如果你想知道在PHP腳本中是否有我需要的所有東西,爲什麼我需要這個Python程序?那麼,你會是正確的,我不需要它,但它不是對我......

回答

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) 

希望工程!

+1

耶!我認爲它工作!謝謝!!現在我必須將它轉換爲Python3(或其他方式) – Freonius

相關問題