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

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

概述我正在尝试创建一个Android应用程序来检查我的工程学校的测试成绩.为了下载包含分数的Word,我需要登录门户网站.我认为通过发送POST请求来实现它会很简单.通过此页面上的代码绕过自签名证书(或其他)的问题后:Self-signedSSLacceptanceonAndroid尝试将任何POST请求发送到登录

我正在尝试创建一个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:frbutton1: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");
@H_403_32@解决方法:

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将POST数据发送到ASP.NET MVC站点时,为什么会出现错误500?全部内容,希望文章能够帮你解决java – 当我通过Android将POST数据发送到ASP.NET MVC站点时,为什么会出现错误500?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1116831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存