2013-11-20 153 views
2

我是Python新手,它是第一篇文章。想要上傳一個TXT文件到服務器,(到目前爲止,它是本地主機)。每次我運行腳本,本地文件上傳並更新到服務器上。我使用Requests模塊上傳到服務器的Python腳本

import requests, time 
url ='http://192.168.49.205/test/database/data.txt' # where i want to write 
files = {'file':('data.txt','C:\Python27\data.txt','rb')} 
#r = requests.post(url,files=files) # this works too 

r= requests.post('http://192.168.49.205/test/database/data.txt', 
data={'upload_type': 'standard',   'upload_to': '0'},files=files) 

print r.status_code 
print r.text 

data.txt沒有更新。只是看到舊的數據(我創建文件時,我把一些值)。我沒有使用PHP或HTML中的任何表單。可以用方法上傳嗎?

相信,我得到了一些清晰張貼的問題後。現在,服務器端的PHP文件正在偵聽客戶端。這是「post.php」。所以,這將取代客戶端的文本文件。 PHP文件從客戶端得到的名稱,任務,價值和張貼到服務器上的「A.TXT」(本地)

<?php  
if(isset($_GET["Name"])){ 
$name=$_GET["Name"]; 
} 

if(isset($_GET["Task"])){ 
$task=$_GET["Task"]; 
} 

if(isset($_GET["Value"])){ 
$value=$_GET["Value"]; 
} 

$f=fopen("a.txt","w") or exit("Unable to open file!"); 
fwrite($f,$name); 
fwrite($f," "); 
fwrite($f,$task); 
fwrite($f," "); 
fwrite($f,$value); 
fclose($f); 

?>` 

所以現在請這個樣子

import requests, time 
url = 'http://192.168.49.205/test/test.php' 
post_data = {'Name':'job','Task':'008','Value':'8'} 

r= requests.post('http://192.168.49.205/test/post.php', data= post_data) 


print r.status_code 
print r.text 

史迪威的值沒有達到「A.TXT」。我錯過了什麼?請指教!

+0

錯誤可能是在服務器端。 – Matthias

+0

'http:// 192.168.49.205/test/database/data.txt'是否接受'POST'請求​​?在那裏聽什麼樣的服務? – 2013-11-20 14:39:09

+0

data.txt是純文本文件。不要想,它需要POST請求或聽。在你的問題後,我明白了。所以,服務器文件應該是接受POST請求的PHP文件。請承擔我的無知。 – Chandra

回答

2

您沒有閱讀代碼中的文件內容。該requests documentation狀態:

文件 - 「名」(可選)字典:文件類對象(或 {「名」(「文件名」,FileObj文件)})爲多編碼上傳。

您的代碼表明您要使用第二個選項。但是:

files = {'file':('data.txt','C:\Python27\data.txt','rb')} 

創建結構的文檔表明 - 你路過3個字符串的元組代替(字符串,file_obj)的元組。你可能想這樣做:

files = {'file':('data.txt',open('C:\Python27\data.txt','rb'))}