【因】
开发的软件需要跟别的公司数据同步(提交数据到对方数据库),但对方没开接口,也不能直接访问对方数据库,只能通过分析Web页通过代码来做数据同步。
对方系统:应该是企业级jsp框架的Web应用,包含struts2的那种(对jsp不熟);
【我的方法】
我用的C#,通过模拟http Request Post数据到对方服务器,从登录到数据查询、更改等等,都成功 了,直到遇到一个页面.....
【问题详细描述】
该页面是数据编辑页面,我通过模拟http Request Post数据,返回状态是OK,返回内容是一个httpDocument(是整个数据编辑页,其中还包含我提交的新数据,都没问题),但是我通过浏览器查看时,发现数据并没有真正更新到数据库。
我已经模拟通过Network Monitor找到的所有http request,包含编辑页加载后,到点击提交按钮,这个过程中所有的向服务器的Request。都正常通过,但就是不写入数据库。
【请问】
到底什么原因?或者Jsp还有什么方法来导致我的更新不成功?
正浏览器里面访问这个并保存能持久化到数据库么,如果是继续,如果不是那说什么都是扯淡
浏览器调试查看post提交的内容和你模拟提交的内容是否一致。
包括cookie,header,表单是否有hidden并分析规则。
你问题里面有说到相应码是200.返回了document。吧返回的内容保存到本地html文件,然后浏览器打开。对比和在浏览器保存成功后的页面是否一致,是否有错误提示,多出的脚本代码等
浏览器提交后,可以正常保存。
我已经比对过我的应用提交和浏览器提交的内容。从编辑页面加载,到提交后,整个过程的Request和Response都一致,完全跟浏览器相同。
返回的html document我直接加载到了测试程序的web控件里,和服务器页面内容也没啥区别。
这和你没什么关系。
请说明具体原理
1. JS或后台是否有数据校验
2. 问下后台是否有判断请求来源之类的校验
1.Js有数据校验,不过我应该也都模拟了。在提交前,有两个发向服务器的get Request,我按照net work monitor抓的样式也模拟过了。
2.无法跟对方联系上。后台如果有判断来源的,应该是什么原理?既然我已经把http的header模拟的跟web 浏览器的完全一样了,后台如何再判断非浏览器来源?
@chutianshu_1981: 判断url的地址是否合法,不过好像你已经模拟了,那你还是问下他们的后台人员吧
@大志若愚: 好的,应该是还有些小的细节没有被发现,不管怎样,还是多谢了!