HttpWebRequest и проверка подлинности форм в C #

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

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

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

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

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

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

Вот fragment того, что я закодировал:

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()); 

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

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

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

который обрабатывает логин:

 

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

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

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

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

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

Взгляните на этот ответ, который имеет код для этого:

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

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

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

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

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

  • HttpWebRequest URL с точкой в ​​конце
  • Использование CookieContainer с classом WebClient
  • Повышение производительности многопоточных HttpWebRequests в .NET.
  • WP7 HttpWebRequest без кеширования
  • Как получить IP-адрес из HTTP-заголовка в Java
  • Могу ли я повторно использовать HttpWebRequest?
  • C # https логин и файл загрузки
  • Основная HTTP-аутентификация на iPhone
  • Загрузка файлов с помощью HTTPWebrequest (multipart / form-data)
  • .NET: Можно ли заставить HttpWebRequest автоматически распаковывать ответы gzip'd?
  • HttpWebRequest: запрос был прерван: запрос был отменен
  • Interesting Posts
    Давайте будем гением компьютера.