Почему я получаю сообщение об ошибке 500 при отправке данных POST на сайт ASP.NET MVC через Android?

Я пытаюсь создать приложение для Android, чтобы проверить мои оценки тестов моей инженерной школы. Чтобы загрузить Word, содержащий оценки, мне нужно зайти на портал.

Я думал, что это будет просто сделать, отправив запрос POST.

После обхода проблемы самозаверяющего сертификата (или что-то еще) благодаря коду на этой странице: Самоподписанный прием SSL на Android

Я все еще получаю ошибку 500 при попытке отправить любой запрос POST на страницу входа, которая находится здесь: https://e-campus.hei.fr/ERP-prod/pc_mv_login.aspx

Я попробовал различные коды из Интернета, чтобы отправить данные POST (особенно, как сделать HTTP-сообщение в Android? ). И даже в чистом java-приложении, я получаю 500.

Когда я укажу URL на другую страницу тестирования, мне удается заставить ее работать, но не на https://e-campus.hei.fr/ERP-prod/pc_mv_login.aspx

Может ли кто-нибудь объяснить мне, почему это не помогает, или помочь мне избавиться от этой ошибки?

EDIT: Это то, что отправляется через мой браузер (в соответствии с инструментами разработки 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 означает, что код на стороне сервера не удался. У него есть ошибка, например, там было NullPointerException . Если тело ответа не содержит ничего разумного (например, stacktrace), чтобы вы могли узнать, как оно вызвано, и поэтому соответствующим образом меняйте запрос, то лучше всего связаться с администратором сервера и сообщить об этой ошибке в код сервера И спросите, как правильно выполнить программный логин.

Если по какой-то причине это не вариант, вам следует дважды проверить, не забываете ли вы отправить конкретный файл cookie, заголовок и / или параметр. Вероятно, серверный код ожидал этого, но он был null а код был глючным, и, следовательно, он полностью сломался с 500. Я бы предложил использовать Firebug для отслеживания всего HTTP-трафика и сравнить его с заголовками / параметрами, Ve комплект. Возможно, вам нужно отправить конкретный файл cookie? Или вам нужно отправить пару имя = значение кнопки отправки? Etcetera.


Обновление : вы отправляете неправильное значение __VIEWSTATE . Веб-сайт работает на ASP.NET MVC, который представляет собой компонентную структуру MVC (например, JSF в Java EE). Он сохраняет дерево компонентов как «состояние просмотра». Вы не должны отправлять случайное / несуществующее / недействительное состояние представления обратно как параметр, но действительный . Вам нужно переписать HTTP-клиент так, чтобы он сначала запускал запрос GET на странице с формой, а затем использовал парсер HTML ( Jsoup ?), Чтобы извлечь значение скрытого __VIEWSTATE ввода __VIEWSTATE и, наконец, запустить запрос POST с таким Value (и точно такой же файл cookie в заголовке запроса!).

Как и в JSF, состояние представления является частью предотвращения атаки CSRF. Вы не можете отправить форму без предварительного запроса формы с самого сайта в том же сеансе.


Intereting Posts