2014-09-30 3 views
0

Я пытаюсь разобрать текст с веб-страницы с именем пользователя и паролем (или загрузить текст как .txt-файл). Я несколько дней крутился вокруг сети и stackoverflow в поисках решения. Похоже, должно быть простое решение, но пока я не могу его найти. Код ниже, кажется, самый логичный и прямой код, который я нашел до сих пор. В настоящее время он возвращает код ошибки 401.Аутентифицировать защищенный паролем веб-сайт

 private void Form1_Load(object sender, EventArgs e){ 

     ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback 
     (
      delegate { return true; } 
     ); 

     using (var client = new CookieAwareWebClient()) 
     { 
      var values = new NameValueCollection 
      { 
       { "username", "username" }, 
       { "password", "password" }, 
      }; 

      client.UploadValues("https://website/", values); 

      string result = client.DownloadString("https://website/licences"); 

      lbl1.Text = result; 
     } 
    } 
+0

Возможно, на веб-сайте, на котором вы пытаетесь пройти аутентификацию, используется какой-нибудь ребенок, проверяющий, откуда происходит запрос, и не принимает POST-файлы из-за? – Floremin

+0

Он запрашивает окно входа в систему –

ответ

0

Да, есть простое решение.

Поскольку вам необходимо очистить текст от стороннего сайта, вам нужен браузер. Вам нужно сделать это прагматично, поэтому вам нужен программируемый браузер.

Для .NET доступны некоторые безглавые программируемые браузеры (см. Ниже). Вы можете включить их в свой проект с помощью NuGet пакетов и запрограммировать ваше требование дополнительно (т.е. код записи, чтобы идентифицировать поля ввода, чтобы ввести имя пользователя и пароль и нажмите кнопку для входа и т.д.)

HTML Agility Pack - http://htmlagilitypack.codeplex.com/

Webkit - http://sourceforge.net/projects/webkitdotnet/

Watin - http://watin.org/

SimpleBrowser - https://github.com/axefrog/SimpleBrowser

Наряду с этим вы с использование CsQuery для синтаксического анализа вашей DOM, как и с помощью jQuery. Да CsQuery - это порт C# для jQuery. Его действительно отличный инструмент

CsQury - https://github.com/jamietre/CsQuery

1

Просто используйте HTTPWebRequest для извлечения данных из внешнего сайта и проанализировать то, что вам нужно от WebResponse. В зависимости от механизма аутентификации, который использует сайт (базовая аутентификация, проверка подлинности форм и т. Д.), Вам нужно будет использовать несколько разных методов для аутентификации. В принятом ответе в this SO Post есть несколько хороших примеров. Чтобы перефразировать, если это Basic Auth или Windows Auth, вы можете использовать класс Network Credentials и передать его с запросом. Если он использует какой-то файл cookie на основе cookie, вам нужно будет построить сообщение формы, получить файл cookie auth и передать файл cookie с запросом на данные.

Смежные вопросы