ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 当我通过Android将POST数据发送到ASP.NET MVC站点时,为什么会出现错误500?

2019-07-10 03:27:14  阅读:141  来源: 互联网

标签:java android asp-net


我正在尝试创建一个Android应用程序来检查我的工程学校的测试成绩.为了下载包含分数的Word,我需要登录门户网站.

我认为通过发送POST请求来实现它会很简单.

通过此页面上的代码绕过自签名证书(或其他)的问题后:Self-signed SSL acceptance on Android

尝试将任何POST请求发送到登录页面时,我仍然收到500错误,这是:https://e-campus.hei.fr/ERP-prod/pc_mv_login.aspx

我尝试从网上发送各种代码来发送POST数据(特别是How to do a HTTP Post in Android?这个).甚至在纯Java应用程序上,我得到500.

当我将URL指向另一个测试页面时,我设法让它工作,但不是在https://e-campus.hei.fr/ERP-prod/pc_mv_login.aspx

任何人都可以向我解释为什么它不起作用或帮助我摆脱这个错误?

编辑:
这是通过我的浏览器发送的内容(根据chrome开发工具)

__EVENTTARGET:
__EVENTARGUMENT:
__VIEWSTATE:dDwxNDU4ODc4MDI5O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDE+O2k8Nz47aTwxMz47aTwxNT47aTwxNz47aTwxOT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8SWRlbnRpZmlhbnQgOjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8TW90IGRlIHBhc3NlIDo7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPExhbmd1ZSA6Oz4+Oz47Oz47dDx0PDt0PGk8Mj47QDxBbmdsYWlzO0ZyYW7Dp2Fpczs+O0A8ZW47ZnI7Pj47bDxpPDE+Oz4+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Vm91cyBuJ8OqdGVzIHBhcyBhdXRvcmlzw6kgIMOgIHZvdXMgY29ubmVjdGVyLjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Q29ubmVjdGVyIDo7Pj47Pjs7Pjs+Pjs+Pjs+inmhCwE9zfymuEXDXGORShkB1GI=
Username:******
Password:******
Langues:fr
Button1:Connecter :

这是我发送的字符串:

String parameters = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE="
            + URLEncoder
                    .encode("dDwxNDU4ODc4MDI5O3Q8O2w8aTwwPjs+O2w8dDw7bDxpPDE+O2k8Nz47aTwxMz47aTwxNT47aTwxNz47aTwxOT47PjtsPHQ8cDxwPGw8VGV4dDs+O2w8SWRlbnRpZmlhbnQgOjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8TW90IGRlIHBhc3NlIDo7Pj47Pjs7Pjt0PHA8cDxsPFRleHQ7PjtsPExhbmd1ZSA6Oz4+Oz47Oz47dDx0PDt0PGk8Mj47QDxBbmdsYWlzO0ZyYW7Dp2Fpczs+O0A8ZW47ZnI7Pj47bDxpPDE+Oz4+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Vm91cyBuJ8OqdGVzIHBhcyBhdXRvcmlzw6kgIMOgIHZvdXMgY29ubmVjdGVyLjs+Pjs+Ozs+O3Q8cDxwPGw8VGV4dDs+O2w8Q29ubmVjdGVyIDo7Pj47Pjs7Pjs+Pjs+Pjs+inmhCwE9zfymuEXDXGORShkB1GI=",
                            "UTF-8") + "&Username="
            + URLEncoder.encode(mUsername, "UTF-8") + "&Password="
            + URLEncoder.encode(mPassword, "UTF-8")
            + "&Langues=fr&Button1="
            + URLEncoder.encode("Connecter :", "UTF-8");

解决方法:

HTTP错误500只意味着服务器端代码失败.它有一个bug,例如在那里抛出了NullPointerException.如果响应主体不包含任何合理的内容(例如堆栈跟踪),以便您可以了解它是如何引起的,从而相应地更改请求,那么最好的办法是联系服务器管理员并在服务器代码中报告此错误并询问如何正确执行程序化登录.

如果由于某种原因这不是一个选项,那么如果您不忘记发送特定的cookie,标题和/或参数,则应该进行双重检查.可能是服务器端代码期待它,但它是null并且代码是错误的,因此它完全打破了500.我建议使用Firebug跟踪整个HTTP流量并将其与标题/参数进行比较’设置.可能你需要发回特定的cookie吗?或者您需要发送提交按钮的名称=值对?等等.

更新:您发送错误的__VIEWSTATE值.该网站运行在ASP.NET MVC上,这是一个基于组件的MVC框架(就像Java EE中的JSF一样).它将组件树存储为“视图状态”.您不应将随机/不存在/无效的视图状态作为参数发送回,而应该是有效的.您需要重写HTTP客户端,以便它首先使用表单在页面上触发GET请求,然后使用HTML解析器(Jsoup?)提取隐藏的__VIEWSTATE输入字段的值,最后发出一个POST请求value(与请求标头中的cookie完全相同!).

与JSF一样,视图状态是CSRF攻击防范的一部分.如果没有首先在同一会话中从网站本身请求表单,则无法提交表单.

标签:java,android,asp-net
来源: https://codeday.me/bug/20190710/1419622.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有