【问题标题】:Python script for upload to server用于上传到服务器的 Python 脚本
【发布时间】:2013-12-04 14:41:29
【问题描述】:

我是 Python 新手,这是第一篇文章。想上传一个TXT文件到服务器,(目前是本地主机)。每次我运行脚本,本地文件上传并更新到服务器上。我正在使用Requests 模块

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”的值。我错过了什么?请指教!

【问题讨论】:

  • 错误可能出在服务器端。
  • http://192.168.49.205/test/database/data.txt 是否接受 POST 请求?那里正在收听什么样的服务?
  • data.txt 是纯文本文件。不要想,它需要 POST 请求或监听。在你的问题之后,我明白了。因此,服务器文件应该是接受 POST 请求的 PHP 文件。请承受我的无知。
  • url = 'httpbin.org/post' 文件 = {'file': open('report.xls', 'rb')} r = requests.post(url, files=files)。在这里,在 URL 上 post 到底是什么意思?它是否在服务器上持续监听部分?
  • 还有其他方法可能受支持,但通常不支持。 PUT 例如应该做你想做的事。 techforum4u.com/content.php/…

标签: python upload python-requests


【解决方案1】:

您没有在代码中读取文件内容。 requests documentation 声明:

files -(可选)“名称”字典:类似文件的对象(或 {'name': ('filename', fileobj)}) 用于分段编码上传。

您的代码建议您使用第二个选项。然而:

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

没有按照文档指示创建结构 - 您传递的是 3 个字符串的元组,而不是 (string, file_obj) 的元组。你可能想这样做:

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

【讨论】:

    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多