文件上传-无法使用urllib和urllib2(python)发送数据



大家好(这里是第一篇文章)。

我正在尝试将数据发送到网页。此网页请求两个字段(一个文件和一个电子邮件地址)。如果一切正常,则网页返回一个页面,表示"一切正常",并将文件发送到提供的电子邮件地址。我执行了下面的代码,但我的电子邮件帐户中没有收到任何信息。

import urllib, urllib2
params = urllib.urlencode({'uploaded': open('file'),'email': 'user@domain.com'})
req = urllib2.urlopen('http://webpage.com', params)
print req.read()

print命令给了我主页的代码(我认为它应该给"一切都好"页面的代码)。

我认为(基于谷歌搜索)海报模块应该做到这一点,但我需要将依赖关系保持在最低限度,因此我想要一个使用标准库的解决方案(如果可能的话)。

提前谢谢。

感谢大家的回答。我使用mechanize库来解决我的问题。

import mechanize 
br = mechanize.Browser()
br.open('webpage.com') 
email='user@domain.com'
br.select_form(nr=0) 
br['email'] = email 
br.form.add_file(open('filename'), 'mime-type', 'filename')    
br.form.set_all_readonly(False) 
br.submit() 

此网站可以检查Referer、User Agent和Cookies。

处理所有这些的方法是使用urllib2.OpenerDirector,您可以通过urllib2.build_opener获得它。

# Cookies handle
cj = cookielib.CookieJar()
CookieProcessor = urllib2.HTTPCookieProcessor(cj)
# Build OpenerDirector
opener = urllib2.build_opener(CookieProcessor)
# Valid User-Agent from Firefox 3.6.8 on Ubuntu 10.04
user_agent = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8'
# Referer says that you send request from web-site title page
referer = 'http://webpage.com'
opener.addheaders = [
    ('User-Agent', user_agent),
    ('Referer', referer),
    ('Accept-Charset', 'utf-8')
]

然后用urlencode准备参数,用opener.open(params) 发送请求

Python 2.7文档:cookielib,OpenerDirector

最新更新