Я использую Jsoup для выполнения некоторых действий на веб-сайте, но у меня проблемы с правильным URL - PullRequest
0 голосов
/ 19 июня 2020

Я использую этот веб-сайт. Я уже вошел в систему с этими учетными данными email:teacher@gmail.com пароль: tttt Я получил файлы cookie и сохранил их в своем приложении ... но всякий раз, когда я пытаюсь добавить новый тип экзамена, я получал ошибку получение исключения URL-адреса Я использую Jsoup

вот код

 private fun addExam() {
    Log.d(TAG, "addExam: -----------------------")
    try{
        val addExamResponse=Jsoup.connect(getString(R.string.addExamUrl))
            .method(Connection.Method.GET)
            .userAgent("Mozilla")
             .cookies(Common.sessionCookies)
            .execute()

        val document=addExamResponse.parse()
        Log.d(TAG, "addExam: ------------------------------------------")
        val authToken:String=document.select("input[name=__RequestVerificationToken]").first().attr("value")
        Log.d(TAG, "addExam: ************************** ${addExamResponse.url()}")
        val formData: HashMap<String, String> = HashMap()
        formData["utf8"] = "e2 9c 93"
        formData["ExamTypeName"]=examType.text.toString()
        formData["Description"]=examDesc.text.toString()
        formData["__RequestVerificationToken"] = authToken

        //Log.d(TAG, "addExam: ----------------------------${Common.sessionCookies}--------------------")

        val examListPage = Jsoup.connect(getString(R.string.addExamUrl))
            .data(formData)
            .method(Connection.Method.POST)
            .userAgent("Mozilla")
            .cookies(Common.sessionCookies)
            .execute()

        Log.d(TAG, "getData: --------------------------------${examListPage.url()}")

        if (examListPage.url().toString().toLowerCase(Locale.ROOT).contains("teacher")){
            runOnUiThread {
                progressBar.hide()
            }
            startActivity(Intent(this,HomeActivity::class.java))

            finish()
        }
        else{

            runOnUiThread {
                Toast.makeText(this,"Something went wrong!!",Toast.LENGTH_LONG).show()
            }
        }
    }
    catch (e:IOException){
        Log.d(TAG, "addExam: -------------------------IO EXCEPTION---------------------${e.message}")
    }
}

Без попытки поймать и вылетает приложение с этим исключением. Трассировка стека ::

E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1
Process: com.example.e_learninghub, PID: 10508
org.jsoup.HttpStatusException: HTTP error fetching URL. Status=500, URL=http://elearninghub.somee.com/Exam/AddExamType
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:682)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:629)
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:261)
    at com.example.e_learninghub.NewExamActivity.addExam(NewExamActivity.kt:65)
    at com.example.e_learninghub.NewExamActivity.access$addExam(NewExamActivity.kt:19)
    at com.example.e_learninghub.NewExamActivity$addExamType$1.invokeSuspend(NewExamActivity.kt:35)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask$DefaultImpls.run(Dispatched.kt:235)
    at kotlinx.coroutines.DispatchedContinuation.run(Dispatched.kt:81)
    at kotlinx.coroutines.scheduling.Task.run(Tasks.kt:94)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:732)

1 Ответ

0 голосов
/ 20 июня 2020

Ошибка 500 предполагает, что на стороне сервера что-то не так. Ваш код выглядит нормально, возможно, что-то не так с вашими параметрами. Вы уверены, что ExamTypeName и Description не пусты? Попробуйте отобразить параметры перед их отправкой:

Log.d(TAG, "formData: --------------------------------${formData}")
...