Python 过帐表单数据失败

Python 过帐表单数据失败,python,python-2.7,urllib2,Python,Python 2.7,Urllib2,有一个表单是用以下内容创建的: <form action="posting.php" method="post" name="post" onsubmit="return checkForm(this)"> 当我将表单的数据发布到posting.php时,它会将我发送回表单所在的页面。我尝试在没有填写字段的情况下手动输入表单,当缺少某些内容时,页面上会显示一条错误消息,而提交表单时页面的HTML中没有该信息(我将表单打印到shell以查看它的位置) 我尝试过使用mechaniz

有一个表单是用以下内容创建的:

<form action="posting.php" method="post" name="post" onsubmit="return checkForm(this)">

当我将表单的数据发布到posting.php时,它会将我发送回表单所在的页面。我尝试在没有填写字段的情况下手动输入表单,当缺少某些内容时,页面上会显示一条错误消息,而提交表单时页面的HTML中没有该信息(我将表单打印到shell以查看它的位置)

我尝试过使用mechanize,但没有成功

根据mechanize的表格:

<TextControl(subject=)>
<TextControl(sub_title=)>
<HiddenControl(<None>=black) (readonly)>
<SelectControl(addbbcode18=[*#, darkred, red, orange, brown, yellow, green, olive, cyan, blue, darkblue, indigo, violet, white, black])>
<HiddenControl(<None>=12) (readonly)>
<SelectControl(addbbcode20=[7, 9, *12, 18, 24])>
<HiddenControl(<None>=:)) (readonly)>
<TextareaControl(message=)>
<HiddenControl(=) (readonly)>
<HiddenControl(mode=newtopic) (readonly)>
<HiddenControl(f=1521) (readonly)>
<HiddenControl(last_post=0) (readonly)>
<CheckboxControl(disable_bbcode=[on])>
<CheckboxControl(disable_smilies=[on])>
<CheckboxControl(notify=[*on])>>

>
我的发布代码(发布url为“domainname.posting.php”):

def post_数据(url,value={}):#读取页面或发布到页面
如果是值!={}:#如果提供了值,则发布请求
data=urllib.urlencode(值)#对值进行编码
请求(url,数据=数据)#发出请求
resp=urllib2.urlopen(req)#获取响应
return resp.read()#返回已读页面
其他:#无值,正常读取请求
请求(url)#请求url
resp=urllib2.urlopen(req)#获取响应
return resp.read()#返回已读页面
打印帖子数据(帖子url,{“主题”:“测试帖子”,“子帖子标题”:“消息”:“测试”,“黑色”,“添加代码18”:“黑色”,“12”,“添加代码20”:“12”,“最后一篇帖子”:“0”,“禁用代码”:“打开”,“禁用微笑”:“打开”,“通知”:“打开”,无:无”,模式”:“新主题”,“f”:“1521”})
表单数据顺序是否需要与表单的顺序匹配(如mechanize所示)?可能我为表单提供了无效的值类型(“disable_bbcode”:“on”例如,它是否应该是“disable_bbcode”:“[*on]”?)。它可能是表单声明中的onsubmit,如果这是一个问题,我如何提交它呢

注:

  • 在打印出来的html中,“subject”和“message”的值是空的,所以我猜这些值永远不会被发布
  • 我怀疑“mode”和“f”是GET方法,但是当我尝试发布到“posting.php?mode=newtopic&f=1521”(从发布的值中删除“mode”和“f”)时,我得到了相同的结果

我可能遗漏了一些内容,但您的表单操作是
posting.php
但您的发布代码是python。当您将文件扩展名更改为
posting.py
时会发生什么情况?对不起,我应该更清楚,我正在使用urllib和urllib2发布到网站上的表单。
def post_data(url, values={}): #either read a page or post to a page
    if values != {}: #if values were provided, post request
        data = urllib.urlencode(values) #encode the valyes
        req = urllib2.Request(url, data=data) #make the request
        resp = urllib2.urlopen(req) #get the response
        return resp.read() #return the read page
    else: #no values, normal read request
        req = urllib2.Request(url) #request the url
        resp = urllib2.urlopen(req) #get the reponse 
        return resp.read() #return the read page

print post_data(post_url, {"subject":"Test Post","sub_title":"","message":"Test","<None>":"black", "addbbcode18":"black","<None>":12,"addbbcode20":"12","<None>":":","last_post":"0","disable_bbcode":"on","disable_smilies":"on","notify":"on",None:None,"mode":"newtopic","f":"1521"})