python: ajax_error DBNull”的对象无法转换为类型“String”

需求:1.登录账户 2.提交答题

分析:
图片说明

图片说明

图片说明

图片说明

图片说明

我的请求:

 # 答题
answerUrl = 'https://bazhong.xueanquan.com/JiaTing/ajax/FamilyEduCenter.EscapeSkill.SeeVideo,FamilyEduCenter.ashx?_method=TemplateIn2&_session=rw'

aHeaders = {
    'Host': 'bazhong.xueanquan.com',
    'Origin':'https://bazhong.xueanquan.com',
    'X-Requested-With':'XMLHttpRequest',

    # application/json; charset=utf-8
    # application/x-www-form-urlencoded
    # text/xml
    'Content-Type':'application/x-www-form-urlencoded',
    'Referer': 'https://bazhong.xueanquan.com/JiaTing/EscapeSkill/SeeVideo.aspx?gid=486&li=980',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36',
    'Cookie':'xxxxxxxxx'
        }

图片说明

http://blog.csdn.net/qin_zhangyongheng/article/details/7824435

参数的值得类型是不是不对,我看1上面的是数值型,你的是字符串型。

1、r = requests.post(url, data=json.dumps(payload))
2、r = requests.post(url, json=payload)
或者分别用以上2种方法试试。

通过charles工具抓包发现它的data是text格式,不是我们平常用的json字符串,也不是form-data表单,第一次遇到啊,真真是头疼了好几天。
图片说明

解决方案:把所有参数直接拼成字符串即可,看它的参数形式,还是换行了,加上\n就可以了。

  dataText = 'workid=4105\nfid=602\ntitle=喝水有学问\nrequire=\npurpose=\ncontents=\ntestwanser=0|0|0\ntestinfo=已掌握技能\ntestMark=100\ntestReulst=1\nSiteName=\nsiteAddrees=\nwatchTime=\nCourseID=980'
    resAns = oneSession.post(answerUrl, data=dataText)
    print resAns.text

问题解决了,很开心。但是总结一下不足:
1.在这个问题中没有对参数格式分析对,导致走了很多弯路,费了很多时间。
2.疏忽大意,犯了“灯下黑”的错误,调试网页源码文件中data的格式直接是个字符串时竟然没有想到手动构造,而是研究python中该怎么传值.....

另外,第一次使用charles软件,好用! 哈哈。

... 同一个网站 , 同一个问题.. 你咋解决的