У меня возникают трудности с взаимодействием с сайтом, использующим базовую аутентификацию для аутентификации пользователя.Взаимодействие с приложением JSF, использующим базовую аутентификацию программно
Я работаю на Visual Basic и я уже пытался использовать
Dim req As HttpWebRequest = HttpWebRequest.Create("http://url.to.website.com")
добавляя заголовки непосредственно к веб-запроса:
req.Headers.Add("Authorization: Basic " & Convert.ToBase64String(Encoding.Default.GetBytes("user" & ":" & "password")))
или с использованием сетевых учетных данных
req.Credentials = New Net.NetworkCredential("user", "password")
, получающий всегда один и тот же код ответа: 401 Несанкционированный
Используя инструменты разработчика Firefox, я могу анализировать и повторно отправлять некоторые веб-запросы, и только с помощью Firefox я могу правильно аутентифицироваться.
отчет Firefox эти заголовки:
Host: url.to.website.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http.//url.to.website.com/portal/data/pub
DNT: 1
Authorization: Basic ZmFrZTpwYXNzd29yZA==
Connection: keep-alive
Так я попытался установить его manaually таким образом:
req.Host = "url.to.website.com"
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"
req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
req.Referer = "https://url.to.website.com/some/path/to/file.jsf"
req.ContentType = "application/x-www-form-urlencoded"
req.KeepAlive = True
req.PreAuthenticate = True
req.Method = "POST"
req.Headers.Add("Authorization: Basic " & Convert.ToBase64String(Encoding.Default.GetBytes("user" & ":" & "password")))
без успеха (получение всегда один и тот же код ответа: 401 Несанкционированное)
Другая попытка была с веб-браузером:
WebBrowser1.Navigate("url", Nothing, Nothing, "Authorization: Basic " & Convert.ToBase64String(Encoding.Default.GetBytes(AUTH_USER & ":" & AUTH_PASSWORD)))
Моя цель - аутентифицировать, затем запрашивать некоторые страницы и собирать ответы, чтобы их проанализировать и использовать позже в приложении.
Как я могу решить проблему аутентификации?
Веб-сайт написан с использованием JSF, и я не контролирую его.
Update:
Моя проблема заключается в проверке подлинности, но не о JSF приложения.
При использовании Firefox все отлично работает (я могу отправить запрос на веб-сайт, и он будет аутентифицировать меня правильно), но при использовании HttpWebRequest аутентификации не удается, даже если установить одни и те же заголовки, как написано раньше.
Я должен выяснить разницу между двумя запросами
Значит, вы делаете «скрипинг экрана»? Удачи ... Надеюсь, что другая сторона ничего не изменит ** ничего **. И JSF не выполняет базовую аутентификацию. Это зависит от контейнера, и если он проверен некоторым кодом на странице, это не связано с понятием базовой аутентификации. Таким образом, вы сомневаетесь, что полностью ошибаетесь. См. Также http://stackoverflow.com/questions/12175763/how-to-send-post-request-to-jsf-component-without-using-html-form – Kukeltje
И что означает «без успеха»? Это взорвало луну? – Kukeltje
Я получал всегда один и тот же код ответа: 401 Несанкционированный –