2015-11-07 4 views
-1

Я новичок в разборе, и мне нужно получить токен CSRF с веб-сайта, чтобы проверить, доступно ли имя пользователя. Я знаю, что токен CSRF хранится в исходном коде HTML сайта в первых 20 строках или около того.Как проанализировать эти данные с помощью HtmlAgilityPack в VB?

<head> 
<title>Website</title> 
<link href="https://fd8c6a1c31abbcfc87c6-9d6bfcdc55882636852ba868a15bca98.ssl.cf5.rackcdn.com/assets/application-afcd9b96896e2ce19d68b2974eb4eb13.css" media="screen" rel="stylesheet"> 
<meta charset="utf-8"> 
<meta content="IE=edge" http-equiv="X-UA-Compatible" 
<meta content="name check, username, domain, check username" name="keywords"> 
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"> 
<meta content="yes" name="mobile-web-app-capable"> 
<meta content="yes" name="apple-mobile-web-app-capable"> 
<meta content="black" name="apple-mobile-web-app-status-bar-style"> 
<meta content="Namechk | Username &amp;amp; Domain Availability Search" property="og:title"> 
<meta content="https://namechk.com/" property="og:url"> 
<meta content="website" property="og:type"> 
<meta content="Use Namechk to search for an available username or domain and secure your brand across the internet." property="og:description"> 
<meta content="https://fd8c6a1c31abbcfc87c6-9d6bfcdc55882636852ba868a15bca98.ssl.cf5.rackcdn.com/assets/logo-full-61eada359058051842c4209ccb16acba.png" property="og:image"> 
<meta content="en_US" property="og:locale"> 
<meta content="authenticity_token" name="csrf-param"> 
<meta content="hVv1hnUD4epiXiojaU2ZjZeRlZfYmoY8Dm6d/h0X3fI=" name="csrf-token"> 
<link href="https://use.fonticons.com/kits/4e70153b/4e70153b.css" media="all" rel="stylesheet"> 
<link href="https://use.fonticons.com/kits/48e45036/48e45036.css" media="all" rel="stylesheet"> 
<script type="text/javascript" src="https://wd-edge.sharethis.com/button/getAllAppDefault.esi?cb=stLight.allDefault&amp;app=all&amp;publisher=8e46a0ce-9473-4683-b2db-c97461495d29&amp;domain=namechk.com"></script> 
<style> 
    .adsbygoogle, 
    .top-ad { 
     display: none !important; 
    } 
</style> 
<link rel="stylesheet" type="text/css" href="//sd.sharethis.com/disc/css/hoverbuttons.6eab8de2ee93b309873157b6d3f977fe.css"> 
<script type="text/javascript" src="//sd.sharethis.com/disc/js/hoverbuttons.035267d71d894482eb413e5bea488ff5.js"></script> 
<link rel="stylesheet" type="text/css" href="https://ws.sharethis.com/button/css/buttons-secure.css"> 
<script type="text/javascript" src="https://ssl.google-analytics.com/ga.js"></script> 

Что мне нужно, чтобы разобрать это маркер CSRF, который, в приведенном выше фрагменте кода, является "hVv1hnUD4epiXiojaU2ZjZeRlZfYmoY8Dm6d/h0X3fI =". Я хотел бы сделать это, используя библиотеку HTMLAgilityPack.

ответ

0

Предположим, что файл HTML хранится на вашем диске. Сначала мы загружаем HTML-файл.

Dim doc = New HtmlDocument() 
doc.Load("HTMLPage1.htm") ' assume it's in the executable folder 

Тогда вы можете запросить этот HTML-файл, используя Linq to XML. Потомки («мета») означают получение всех узлов, имя которых равно meta. Затем вы проверяете, имеет ли узел атрибут name. Если у него есть атрибут name, проверьте, является ли его значение csrf-token.

Dim node = doc. _ 
    DocumentNode. _ 
    Descendants("meta"). _ 
    FirstOrDefault(Function(x) 
         Return _ 
          x.Attributes.Contains("name") _ 
          AndAlso x.Attributes("name").Value = "csrf-token" 
        End Function) 

Тогда вы можете получить значение атрибута content в этом узле. Я использую консольное приложение, поэтому просто печатаю его на экране.

If Not node Is Nothing Then 
     Console.WriteLine(node.Attributes("content").Value) 
    Else 
     Console.WriteLine("Not found!") 
    End If 

Полный исходный код.

Imports HtmlAgilityPack 

Module Module1 

    Sub Main() 

     ' load the html 
     Dim doc = New HtmlDocument() 
     doc.Load("HTMLPage1.htm") 

     ' query the html 
     Dim node = doc. _ 
      DocumentNode. _ 
      Descendants("meta"). _ 
      FirstOrDefault(Function(x) 
           Return _ 
            x.Attributes.Contains("name") _ 
            AndAlso x.Attributes("name").Value = "csrf-token" 
          End Function) 

     ' print result 
     If Not node Is Nothing Then 
      Console.WriteLine(node.Attributes("content").Value) 
     Else 
      Console.WriteLine("Not found!") 
     End If 

     Console.ReadKey(True) 

    End Sub 

End Module 

Если HTML-файл находится в сети, вы должны создать экземпляр класса HtmlWeb. Затем используйте его для загрузки HTML-файла с сервера.

Dim web = New HtmlWeb() 
doc = web.Load("www.somewebsite.com/somefile.html") 
Смежные вопросы