18 марта 2015
Кравченко Виктор

Как получить содержимое произвольной вебстраницы

VB.NET Полезные функции Web .NET
01

Ряд задач связанных с обработкой информации в интернете приходится начинать с элементарного — получение этой самой информации.

02

Речь идет о получении html-кода вебстраницы типа:

03 HTML
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="utf-8" /> <title>...</title> </head>
<body> ... </body>
</html>
04

Для решения этой задачи существует 2 объекта — HttpWebResponse и HttpWebRequest. Вызов функции осуществляется следующим образом:

05 VB.NET
1
2
3
4
Dim result As String = "" result = ПолучитьСодержимоеСтраницы(url) ' или указываем нужную кодировку result = ПолучитьСодержимоеСтраницы(url, Encoding.UTF8)
06

Сама функция:

07 VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Private Function ПолучитьСодержимоеСтраницы(url As String, Optional encoding As Encoding = Nothing) As String Dim wResponse As HttpWebResponse Dim result As String = "" Dim host As String = ПолучитьХост(url) Try wResponse = ПолучитьЗапрос(url, host).GetResponse result = New StreamReader(wResponse.GetResponseStream, If(encoding, encoding.Default)).ReadToEnd wResponse.Close() Catch ex As Exception MsgBox("Error", ex.ToString) End Try Return result End Function
Private Function ПолучитьХост(url As String) As String Dim host As String = url If host.IndexOf("://") >= 0 Then host = host.Substring(host.IndexOf("://") + 3) 'Отсекаем слева протокол, если есть (http://, https://, ftp://) End If If host.IndexOf("/") >= 0 Then host = host.Substring(0, host.IndexOf("/")) 'Оставляем только хост End If Return host End Function
Private Function ПолучитьЗапрос(requestUriString As String, _ host As String, _ Optional method As String = "GET", _ Optional referer As String = "", _ Optional cacheControl As String = "max-age=0", _ Optional accept As String = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", _ Optional acceptEncoding As String = "gzip,deflate,sdch", _ Optional acceptLanguage As String = "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4", _ Optional userAgent As String = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", _ Optional connection As String = "Keep Alive", _ Optional automaticDecompression As DecompressionMethods = DecompressionMethods.GZip Or DecompressionMethods.Deflate, _ Optional cookie As String = "" _ ) As HttpWebRequest Dim wr As HttpWebRequest = HttpWebRequest.Create(requestUriString) wr.Method = method ' Cache wr.Headers.Add(HttpRequestHeader.CacheControl, cacheControl) ' Client wr.Accept = accept wr.Headers.Add(HttpRequestHeader.AcceptEncoding, acceptEncoding) wr.Headers.Add(HttpRequestHeader.AcceptLanguage, acceptLanguage) wr.UserAgent = userAgent ' Transport wr.Connection = connection wr.Host = host wr.Referer = referer wr.AutomaticDecompression = automaticDecompression
' Добавляем куки, имитируем переход с предыдущего запроса 'If Not String.IsNullOrWhiteSpace(cookie) Then wr.Headers.Add(HttpRequestHeader.Cookie, cookie) 'If Not String.IsNullOrWhiteSpace(cookie) Then wr.Headers.Add(HttpRequestHeader.Cookie, cookie) 'If Not String.IsNullOrWhiteSpace(cookie) Then wr.Headers.Add(HttpRequestHeader.Cookie, cookie)
Return wr End Function
08

Необходимо импортировать пространства имен:

09 VB.NET
1
2
3
Imports System.Net Imports System.IO Imports System.Text
10

Похожие запросы:

  • Как получить в переменную содержимое страницы
  • Получение содержимого URL методом GET
  • Как загрузить содержимое web-страницы
comments powered by HyperComments