罗林公爵 2018-03-18 14:42 采纳率: 50%
浏览 1231
已结题

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'
        }

图片说明

  • 写回答

5条回答 默认 最新

  • 罗林公爵 2018-03-20 09:50
    关注

    通过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软件,好用! 哈哈。

    评论

报告相同问题?