Ошибка 404 при получении ответа сервера vb.net

Я совсем новичок в веб-запросах, поэтому понятия не имею, в чем причина ошибки, которую я получаю.

Я пытаюсь войти в форму, следуя руководству Microsoft по веб-запросу, но когда я хочу получить ответ сервера, у меня возникает следующая ошибка:

"удаленный сервер вернул ошибку (404) не найден"

Итак, я знаю, что URL-адрес, который я использую, действительно существует, а затем задаюсь вопросом, какая часть кода плохая. Может быть, это потому, что я делаю запрос HTTPS, в отличие от учебника, и это что-то меняет? Кроме того, я немного сбит с толку, получив ответ от сервера напрямую: не должен ли быть какой-то триггер, чтобы узнать, когда сервер ответил?

Dim request = WebRequest.Create("https://ssl.vocabell.com/mytica2/login")
request.Credentials = CredentialCache.DefaultCredentials
request.Method = "POST"
Dim byteArray = Encoding.UTF8.GetBytes("_username=x&_password=x")
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = byteArray.Length
Dim dataStream = request.GetRequestStream()
dataStream.Write(byteArray, 0, byteArray.Length)
dataStream.Close()
Dim reponse = request.GetResponse() 'ERROR
MsgBox(CType(reponse, HttpWebResponse).StatusDescription)
Using ds = reponse.GetResponseStream
     Dim reader = New StreamReader(ds)
     MsgBox(reader.ReadToEnd)
End Using
reponse.Close()

Спасибо за ваше время, и если у вас есть какой-либо соответствующий учебник по теме, я был бы рад прочитать его!


person Gary F    schedule 01.07.2019    source источник
comment
Может не сработать, но попробуйте изменить request.Method = "POST" на request.Method = "GET" , стоит попробовать   -  person K.Madden    schedule 01.07.2019
comment
разве не должно быть триггера, чтобы узнать, когда сервер ответил? ... этот код является синхронным, поэтому в основном ваш код VB ждет, пока не получит ответ, прежде чем продолжить. Если бы вы выполняли асинхронный запрос, это было бы разумным соображением.   -  person ADyson    schedule 01.07.2019
comment
@K.Madden, у вас не больше представления, чем у меня, чего ожидает удаленный сайт, но по опыту я сомневаюсь, что он принимает имя пользователя и пароль в качестве параметров GET / querystring - это обычно считается большой безопасностью нет-нет. Приведенный выше запрос явно пытается имитировать обратную передачу формы, поэтому я был бы очень удивлен, если бы переход на GET оказался полезным. Также обычно, если сайт настроен правильно, использование неправильного метода HTTP должно привести к ответу 405 (метод не разрешен), а не 404 (не найден).   -  person ADyson    schedule 01.07.2019
comment
@ADyson Ах, хорошо, спасибо за объяснение, я только что вспомнил, когда некоторое время назад я dd asp был довольно новым новичком, который я видел где-то в Интернете, и это помогло мне. Будучи новичком, я не заглядывал в безопасность и все такое! Спасибо   -  person K.Madden    schedule 01.07.2019
comment
Спасибо за Ваш ответ ! @ADyson да, я думал, что ошибка возникла из-за кода, поэтому я не думал, что было бы полезно указывать реальный URL-адрес, с которым я пытаюсь взаимодействовать, вот он: ssl.vocabell.com/mytica2/login   -  person Gary F    schedule 01.07.2019


Ответы (1)


Упомянутая вами страница существует и использует HTTPS, но если вы посмотрите на тег формы внутри нее, это будет выглядеть так:

<form class="login-form form-horizontal" action="/mytica2/login_check" method="POST">

Это означает, что он не отправляет форму обратно на тот же URL-адрес, что и страница, вместо этого он отправляет ее на URL-адрес, содержащийся в этом атрибуте «действие». Если вы пытаетесь использовать свой код для имитации отправки формы входа, похоже, вам нужно вместо этого отправить запрос POST на https://ssl.vocabell.com/mytica2/login_check.

person ADyson    schedule 01.07.2019