文件上傳post
在機器上安裝了Python的setuptools工具,可以通過下面的命令來安裝 poster:
easy_install poster
裝完之後,安裝下面代碼就可以實現post表單上傳文件了:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2
# 在 urllib2 上注冊 http 流處理句柄
register_openers()
# 開始對文件 "DSC0001.jpg" 的 multiart/form-data 編碼
# "image1" 是參數的名字,一般通過 HTML 中的 <input> 標簽的 name 參數設置
# headers 包含必須的 Content-Type 和 Content-Length
# datagen 是一個生成器對象,返回編碼過後的參數
datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})
# 創建請求對象(localhost伺服器IP地址,5000伺服器埠)
request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)
# 實際執行請求並取得返回
print urllib2.urlopen(request).read()
❷ 如何在 Python 中模擬 post 表單來上傳文件
首先要知道表單數據是以什麼形式組合起來POST到後台的,然後要知道文件的編碼格式,一般來講,這些東西都在header裡面有
然後要找到upload介面長啥樣子
調用requests包的post方法,拼接所需要的data和headers模擬上傳,如果需要cookie,需要獲取
eg:
data = 表單數據+文件
headers = {'': '', '': ''}
cookie = requests('登錄介面', data=data, headers=headers).cookies
req = requests('POST介面', data=data, headers=headers, cookies=cookie)
❸ 如何在 Python 中模擬 post 表單來上傳文件
最近有個將文件上傳到內部web伺服器上的任務,於是參考了網上部分源碼用python寫了這個小程序,代碼如下:
[python]view plain
#coding:utf-8
'''''
Createdon2015.3.19
@author:damofy
'''
importos
importtime
importsys
importurllib2
'''''
filename待上傳的文件
fieldname表單域中的name屬性
'''
defCreateBody(filename,fieldname,strBoundary):
bRet=False
sData=[]
sData.append('--%s'%strBoundary)
#'Content-Disposition:form-data;name="uploadfile";filename="XX-Net-1.3.6.zip"'
sData.append('Content-Disposition:form-data;name="%s";'%fieldname+'filename="%s"'%os.path.basename(filename))
sData.append('Content-Type:%s '%'application/octet-stream')
try:
pFile=open(filename,'rb')
sData.append(pFile.read())
sData.append('--%s-- '%strBoundary)
bRet=True
finally:
pFile.close()
returnbRet,sData
defuploadfile(http_url,filename,fieldname):
ifos.path.exists(filename):
filesize=os.path.getsize(filename)
print('file:'+filename+'is%dbytes!'%filesize)
else:
print('file:'+filename+'isn'texists!')
returnFalse
strBoundary='---------------------------%s'%hex(int(time.time()*1000))
bRet,sBodyData=CreateBody(filename,fieldname,strBoundary)
ifTrue==bRet:
http_body=' '.join(sBodyData)
stReq=urllib2.Request(http_url,http_body)
stReq.add_header('User-Agent','Mozilla/5.0')
stReq.add_header('Content-Length:','%d'%filesize)
stReq.add_header('Content-Type','multipart/form-data;boundary=%s'%strBoundary)
resp=urllib2.urlopen(stReq,timeout=5)
#getresponse
msg=resp.read()
print("Responsecontent: "+msg)
else:
print("CreateBodyfailed!")
returnbRet
if__name__=='__main__':
iflen(sys.argv)>2:
http_url=sys.argv[1]
filename=sys.argv[2]
else:
print('pythonupload.pyhttp://10.20.131.23/upload./test.dat')
sys.exit()
#參數3"uploadfile"是post表單中的name屬性,需要與服務端保持一致
uploadfile(http_url,filename,'uploadfile')
❹ 如何用POST方法上傳文件
POST方法上傳文件 隨著php不斷的完善,PHP對文件上傳的支持也越來越完美,在PHP 4.0.3以前我們只能用() 和 is_uploaded_file()方法結合來上傳文件,呵呵,其實就是這樣我們也會感覺到PHP相對於ASP來說上傳文件要方便很多,這也就是本人選擇PHP的一點小小的引以為豪的地方。PHP 4.0.3之後PHP又出了一個新函數move_uploaded_file()。上傳文件相對來說又簡便了不少,只要這一個函數就行(我可不是說上傳文件系統只要就一個函數就足夠了,大家可不要誤解我的意思,我的意思是move_uploaded_file是上傳文件的一個核心函數)。 好了,我們看一個三個函數的講解(資料來自:PHP手冊)。 (string source,string desk); 將文件從 source 拷貝到 dest。如果成功則返回 TRUE,失敗則返回 FALSE。 例: if (!($file, $file.'.bak')) { print ("failed to $file...<br>\n"); } is_uploaded_file(string filename) 如果 filename 所給出的文件是通過 HTTP POST 上傳的則返回 TRUE。 move_uploaded_file(string filename, string destination) 本函數檢查並確保由 filename 指定的文件是合法的上傳文件(即通過 PHP 的 HTTP POST 上傳機制所上傳的)。如果文件合法,則將其移動為由 destination 指定的文件。 由三個函數的解釋就可以得到一個結論,move_uploaded_file()是()和is_uploaded_file()函數的結合 講了這么半天大家用起這三個函數可能還會有些生疏,下面給大家兩個例子: 首先,建立一個前台頁面,命名為index.html Code代碼如下: <form enctype="multipart/form-data" action="_URL_" method="post"> Send this file: <input name="filename" type="file"> <input type="submit" value="Send File"> </form> 1,下面是關於()和is_uploaded_file()方法上傳文件的方法(保存為:.php,上傳文件需要將index.html中的_URL_改為.php) Code代碼如下: <?php $path="./uploadfiles/"; if(is_uploaded_file($filename)) //特別注意這里,傳遞給is_uploaded_file的為$filename,可不要傳遞$_FILES["filename"]["name"] { $file1=$_FILES["filename"]["name"]; //注意這里$_FILES[]方法為PHP4.1.0及以上版本支持,PHP以下的版本要用$HTTP_POST_FILES[]方法 $file2=$path.time().$file1; $flag=1; } if($flag) $result=($_FILES['filename']['tmp_name'],$file2); if($result) echo "上傳成功!"; ?> 2,下面是關於move_uploaded_file()方法上傳文件的方法(保存為:move.php,上傳文件需要將index.html中的_URL_改為move.php) Code代碼如下: <?php $path="./uploadfiles/"; if($_FILES["filename"]["name"]){ $file1=$_FILES["filename"]["name"]; $file2 = $path.time().$file1; $flag=1; } if($flag) $result=move_uploaded_file($_FILES["filename"]["tmp_name"],$file2); //特別注意這里傳遞給move_uploaded_file的第一個參數為上傳到伺服器上的臨時文件 if($result) echo "上傳成功!"; ?> 文件上傳就講到這里了,這只是兩個小程序,其實要完成文件上傳所要的代碼可不是這些就能了事的。一般還要有文件大小限制,文件擴展名選取,還有一些其它的安全方案。
❺ 如何在 Python 中模擬 post 表單來上傳文件
模擬post請求可以用requests庫,所謂的上傳文件,其實先讀取文件,把裡面的數據賦值給一個參數,然後再寫到一個表單裡面,最後發出去
import requests
files = {'file': open(file_path, 'rb')}
r = requests.post(url, files=files)
❻ 為什麼進行文件上傳時只能使用post而不能用get
顧名思義:get,得到,取得,這時是下傳到本地。
POST,郵寄,寄出去,上傳文件。
❼ 如何在 Python 中模擬 post 表單來上傳文件
在機器上安裝了Python的setuptools工具,可以通過下面的命令來安裝 poster:
easy_installposter
裝完之後,安裝下面代碼就可以實現post表單上傳文件了:
fromposter.encodeimportmultipart_encode
fromposter.streaminghttpimportregister_openers
importurllib2
#在urllib2上注冊http流處理句柄
register_openers()
#開始對文件"DSC0001.jpg"的multiart/form-data編碼
#"image1"是參數的名字,一般通過HTML中的<input>標簽的name參數設置
#headers包含必須的Content-Type和Content-Length
#datagen是一個生成器對象,返回編碼過後的參數
datagen,headers=multipart_encode({"image1":open("DSC0001.jpg","rb")})
#創建請求對象(localhost伺服器IP地址,5000伺服器埠)
request=urllib2.Request("http://localhost:5000/upload_image",datagen,headers)
#實際執行請求並取得返回
printurllib2.urlopen(request).read()
❽ php上傳文件為什麼一定要用post
傳輸機制限定必須要用post,並且並須要加multipart/form-data,不然伺服器得不到需要上傳的文件
❾ 如何在 Python 中模擬 post 表單來上傳文件
在機器上安裝了Python的setuptools工具,可以通過下面的命令來安裝 poster:
easy_install poster
裝完之後,安裝下面代碼就可以實現post表單上傳文件了:
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2
# 在 urllib2 上注冊 http 流處理句柄
register_openers()
# 開始對文件 "DSC0001.jpg" 的 multiart/form-data 編碼
# "image1" 是參數的名字,一般通過 HTML 中的 <input> 標簽的 name 參數設置
# headers 包含必須的 Content-Type 和 Content-Length
# datagen 是一個生成器對象,返回編碼過後的參數
datagen, headers = multipart_encode({"image1": open("DSC0001.jpg", "rb")})
# 創建請求對象(localhost伺服器IP地址,5000伺服器埠)
request = urllib2.Request("http://localhost:5000/upload_image", datagen, headers)
# 實際執行請求並取得返回
print urllib2.urlopen(request).read()