我是网络开发的新手,所以如果以下问题听起来有点幼稚,请怜悯。如何使用python发布到Web表单?我知道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
我想查看返回的结果,但是当前的代码段只会在不处理上传文件的情况下提供结果。有什么我想念的吗
------------ ---------------- UPDATE 我现在就是这样做的
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,它就可以了!所以我怀疑我在请求中遗漏了一些东西。有什么建议吗?
答案 0 :(得分:2)
如果您查看表单的action
属性,则会转到process.php
- 因此您需要将文件上传到http://www.comdroid.org/process.php
。
使用标准库进行文件上传有点痛苦 - 如果您被允许,我建议您使用requests - 他们甚至have an example of what you're asking for in their documentation:
url = 'http://httpbin.org/post'
files = {'file': open('report.xls', 'rb')}
r = requests.post(url, files=files)
我还找到了this SO answer on how to do it with the mechanize library和a code sample that might help if you want to do it with the standard library。