Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我通过Android向ASP.NET MVC站点发送POST数据时,为什么会出现错误500?_Java_Android_Asp.net - Fatal编程技术网

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

Java 当我通过Android向ASP.NET MVC站点发送POST数据时,为什么会出现错误500?,java,android,asp.net,Java,Android,Asp.net,我正在尝试创建一个android应用程序来检查我在工程学校的考试成绩。为了下载包含分数的单词,我需要登录到门户 我认为发送一个POST请求会很简单 由于本页上的代码,绕过自签名证书(或其他)问题后: 在尝试向登录页面发送任何POST请求时,我仍然收到一个500错误,如下所示: 我尝试了网络上的各种代码来发送帖子数据(尤其是这一个)。即使在纯java应用程序上,我也能得到500分 当我将URL指向另一个测试页面时,我设法让它工作,但不是在上面 有人能解释一下为什么它不起作用或者帮我摆脱这个错误吗

我正在尝试创建一个android应用程序来检查我在工程学校的考试成绩。为了下载包含分数的单词,我需要登录到门户

我认为发送一个POST请求会很简单

由于本页上的代码,绕过自签名证书(或其他)问题后:

在尝试向登录页面发送任何POST请求时,我仍然收到一个500错误,如下所示:

我尝试了网络上的各种代码来发送帖子数据(尤其是这一个)。即使在纯java应用程序上,我也能得到500分

当我将URL指向另一个测试页面时,我设法让它工作,但不是在上面

有人能解释一下为什么它不起作用或者帮我摆脱这个错误吗

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

这是我发送的字符串:

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
。如果响应正文不包含任何合理的内容(例如stacktrace),以便您了解其原因并相应地更改请求,那么您最好联系服务器管理员,在服务器代码中报告此错误,并询问如何正确执行编程登录

如果出于某种原因这不是一个选项,那么您应该仔细检查是否没有忘记发送特定的cookie、头和/或参数。可能服务器端的代码期待它,但它是
null
,代码有缺陷,因此它完全崩溃了。我建议使用它跟踪整个HTTP流量,并将其与您设置的头/参数进行比较。也许你需要发送一个特定的cookie回来?或者您需要发送提交按钮的名称=值对?等等


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

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



你能发布发送的标题吗?我正在浏览页面来源。在表单字段中,除了用户名和密码、\uuu事件目标、\uu事件参数和\uu视图状态之外,还有3个字段。在您的代码中,您是否也在POST请求中发送这些值?我完全了解如何提取_VIEWSTATE,但如何传递相同的cookie?在第一个请求中,服务器应该在响应中添加一个指示会话ID的
Set Cookie
头。您需要在后续请求的
Cookie
头中准确地发送Cookie name=值,以便维护会话。有关一些示例,请参见第二个HTTPS请求是否存在此问题?在发送第一个请求之前,请尝试设置以下系统属性:
system.setProperty(“http.keepAlive”、“false”)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");