HttpWebRequest и формы аутентификации в C # - PullRequest
6 голосов
/ 12 марта 2009

Я системный парень и в настоящее время работаю над проектом веб-разработки с частичной занятостью, поэтому я довольно новичок в этом. Я пытаюсь написать http-клиент для www.portapower.com.

Это относится к определенным элементам, которые размещены на веб-сайте, и, если они соответствуют определенным требованиям, будет напечатано сообщение.

При попытке доступа к этой странице:

http://www.portapower.com/getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==

Сайт перенаправляет меня на страницу регистрации по умолчанию:

http://www.portapower.com/defaregit.php

Вот фрагмент того, что я кодировал:

CookieContainer myContainer = new CookieContainer();

HttpWebRequest request = (HttpWebRequest)
WebRequest.Create("http://www.portapower.com/" + urlpart);
request.Credentials = new NetworkCredential("****", "******");
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = "POST";
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();

Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());

У меня есть имя пользователя и пароль, и он отлично работает при использовании из браузера. Пожалуйста, скажите мне, если это правильный способ доступа к аутентифицированной странице.

Ответы [ 4 ]

6 голосов
/ 12 марта 2009

Зависит от того, как сайт аутентифицирует пользователей. Если они используют обычную аутентификацию или аутентификацию Windows, тогда вы можете установить Credentials свойство HttpWebRequest класса в имя пользователя / пароль / информацию о домене, и оно должно работать.

Однако, похоже, что вы должны ввести имя пользователя / пароль на сайте, что означает, что вам придется сначала войти на сайт. Глядя на главную страницу, это то, что я нахожу в элементе <form>, который обрабатывает логин:

<form name="formlogin" method="post" action="./defalogin.php" >
  <input name="emtext" type="text" id="emtext" size="12">
  <input name="pstext" type="password" id="pstext" size="12">
  <input type="submit" name="Submit" value="Logn in" 
    onClick="return logincheck()" >
</form>

Я включил только соответствующие части.

Учитывая это, вы должны сначала перейти на страницу ./defalogin.php со значениями HttpWebRequest и POST emtext и pstext. Также убедитесь, что для свойства CookieContainer установлено значение CookieContainer. Когда этот вызов POST возвращается, он, скорее всего, будет заполнен файлом cookie, который вам придется отправить обратно на сайт. Просто продолжайте устанавливать свойство CookieContainer для всех последующих HttpWebRequest экземпляров на это CookieContainer, чтобы убедиться, что файлы cookie распространяются.

Тогда вы перейдете на страницу, указанную в ссылке.

Беспокойство вызывает также функция logincheck javascript, но, глядя на источники сценариев, она ничего не замечает.

2 голосов
/ 12 марта 2009

Учетные данные, которые вы передаете, предназначены для аутентификации Windows. Вам необходимо отправить данные публикации с данными, которые имитируют отправку формы, а затем зафиксировать cookie-файл сеанса, установленный в ответе, и использовать этот cookie для будущих запросов

Посмотрите на этот ответ, в котором есть код для этого:

Войдите на страницу с помощью HttpWebRequest

1 голос
/ 12 марта 2009

Вы не можете сделать это таким образом; передаваемые вами учетные данные можно использовать с базовой схемой аутентификации (т. е. когда в браузере появляется диалоговое окно с именем пользователя / паролем). Вам нужно будет смоделировать ввод данных в эту форму и поймать войдите в cookie и используйте его.

0 голосов
/ 12 марта 2009

Класс NetworkCredential действительно предназначен для управления обычными учетными данными Windows (NTLM, Kerberos и т. Д.).

Этот сайт является PHP-сайтом, работающим на Apache, поэтому я не думаю, что они используют NTLM или kerberos.

То, что вы хотите сделать, это опубликовать некоторые поля FORM на сайте, а затем сохранить cookie, который вы получите. Убедитесь, что при последующих запросах вы отправляете cookie на сайт, чтобы он знал, что вы уже вошли в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...