Я совсем новичок в веб-запросах, поэтому понятия не имею, в чем причина ошибки, которую я получаю.
Я пытаюсь войти в форму, следуя руководству Microsoft по веб-запросу, но когда я хочу получить ответ сервера, у меня возникает следующая ошибка:
"the remote server returned an error (404) not found"
Итак, я знаю, что 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()
Спасибо за ваше время, и если у вас есть какой-либо соответствующий учебник по теме, я был бы рад прочитать его!
«Разве не должен быть какой-то триггер, чтобы узнать, когда сервер ответил?» ... этот код является синхронным, поэтому в основном ваш код VB ждет, пока не получит ответ, прежде чем продолжить. Если бы вы выполняли асинхронный запрос, это было бы разумным соображением.
@K.Madden, у вас не больше представления, чем у меня, чего ожидает удаленный сайт, но по опыту я сомневаюсь, что он принимает имя пользователя и пароль в качестве параметров GET / querystring - это обычно считается большой безопасностью нет-нет. Приведенный выше запрос явно пытается имитировать обратную передачу формы, поэтому я был бы очень удивлен, если бы переход на GET оказался полезным. Также обычно, если сайт настроен правильно, использование неправильного метода HTTP должно привести к ответу 405 (метод не разрешен), а не 404 (не найден).
@ADyson Ах, хорошо, спасибо за объяснение, я только что вспомнил, когда некоторое время назад я dd asp был довольно новым новичком, который я видел где-то в Интернете, и это помогло мне. Будучи новичком, я не заглядывал в безопасность и все такое! Спасибо
Спасибо за Ваш ответ ! @ADyson да, я думал, что ошибка возникла из-за кода, поэтому я не думал, что было бы полезно указывать реальный URL-адрес, с которым я пытаюсь взаимодействовать, вот он: ssl.vocabell.com/mytica2/логин





Упомянутая вами страница существует и использует HTTPS, но если вы посмотрите на тег формы внутри нее, это будет выглядеть так:
<form class = "login-form form-horizontal" action = "/mytica2/login_check" method = "POST">
Это означает, что он не отправляет форму обратно на тот же URL-адрес, что и страница, вместо этого он отправляет ее на URL-адрес, содержащийся в этом атрибуте «действие». Если вы пытаетесь использовать свой код для имитации отправки формы входа, похоже, вам нужно вместо этого отправить запрос POST на https://ssl.vocabell.com/mytica2/login_check.
Может не сработать, но попробуйте поменять
request.Method = "POST"наrequest.Method = "GET", стоит попробовать