我想用python脚本填充一些web表单并使用POST请求发送。问题是表单有fileuploading。我找到了这个:poster用于python。所以,我带着FireBug来到网站并填写表格。我看到了什么:
values[action] add_save
values[mod] blog
values[depth] 2
values[pid] 121
values[title] title
values[title_eng] title_en
img PNG...[a lot of binary image data]
该网站使用授权,所以我有:
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, theurl, username, password)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = poster.streaminghttp.register_openers()
opener.add_handler(authhandler)
现在我来自网站的默认样本,并编写了代码:
index = """some parsed integer"""
datagen, headers = multipart_encode({
'values[action]': 'add_save',
'values[mod]': 'blog',
'values[depth]': '2',
'values[pid]': index,
'values[title]' : 'title',
'values[title_eng]' : 'title_eng',
'img': open('1.png', 'rb')
})
request = urllib2.Request(theurl, datagen, headers)
getdata = urllib2.urlopen(request)
print getdata.read()
我没有错误等。但是在发送POST后,脚本不会将其添加到数据库中(当我手工完成时一切都很好)。
我添加了这段代码:
for value in datagen:
print value
结果是:link。 (文本中的123数字是索引变量值)。
答案 0 :(得分:0)
我之前没有使用过您的方法,但已成功使用MultipartPostHandler来做类似的事情。简而言之,一个例子如下所示。
import MultipartPostHandler
import urllib2
form_opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
urllib2.install_opener(form_opener)
datagen = {vars}
o=opener.open(url, datagen)
可以找到MultipartPostHandler here.
您还可以将urllib2.HTTPCookieProcessor()添加到开启者以处理如下身份验证:
import urllib
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
# Or, (MultipartPostHandler.MultipartPostHandler, urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
login = urllib.urlencode(dict(username='user',password='pass',login='Login'))
o=opener.open(url, login)
这是我的第一篇文章,请原谅我,如果我有点偏离目标:)
答案 1 :(得分:0)
您是否检查过您所做的每项请求(包括登录网站)的响应,以确保您已获得正确的网页并设置了正确的Cookie?