1

我是 Web 开发的新手,所以如果以下问题听起来有点幼稚,请多多包涵。如何使用 python 发布到 Web 表单?我知道网络表单是这样的,我想上传一个本地文件以便在线处理并获取返回的数据

<form action="process.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file" id="chooser" /><br />
    <input type="submit" value="Upload" name="submit"  />
</form>

到目前为止,这是我的 python 程序。

upfile = urllib.urlencode( {'file':path/to/my/local/file})
filehandle = urllib.urlopen('http://www.comdroid.org/', upfile)
soup = BeautifulSoup(filehandle)
print soup

我想查看返回的结果,但是当前的代码片段只给了我结果而不处理我上传的文件。有什么我想念的吗

------------更新----这是我现在的做法

import urllib2
import urllib 
import requests
import os
files1 ={'file':open('/opt/apps/au.com.psyborg.sbc-5.apk','rb')‌​}
#response= os.system("curl --form   file=@/opt/apps/au.com.psyborg.sbc-5.apk --form submit=Upload www.comdroid.org/process.php")
req = requests.post('comdroid.org/process.php', files = files1) 
print req.text

奇怪的是我不能用请求来做,服务器抱怨我的文件不是 .apk 文件,它实际上是。但是,如果我使用注释掉的 os.system 切换到 curl,它可以工作!所以我怀疑我在这里遗漏了一些东西。有什么建议吗?

4

1 回答 1

2

如果您查看表单的action属性,它会process.php- 所以您需要将文件上传发送到http://www.comdroid.org/process.php.

使用标准库进行文件上传有点痛苦——如果你被允许,我建议你使用requests ——他们甚至在他们的文档中提供了你所要求的示例

url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)

我还找到了这个关于如何使用 mechanize 库的 SO 答案,以及一个代码示例,如果您想使用标准库,它可能会有所帮助

于 2013-03-08T16:44:40.403 回答