Страницы: 1
RSS
Загрузка страницы http в переменную VBA
 
Добрый день!

Задача: считать данные со страницы в сети интернет.

По всей видимости запрос "проксируется" XmlHttpRequest.
С таким сталкиваюсь впервые поэтому не знаю как работать с такими запросами.
Есть у кого-либо идеи как осуществить чтение содержимого страницы?
Код
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
Sub load_data()
'реальная ссылка на страниц в браузере http://www.mami.ru/rasp/edu/mami.php#group=124433
'то есть сервер использует XhrIframeProxy
Debug.Print t
End Sub
 
Public Function send_get(url) As Variant
Dim oHttp As Object
Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
 
'    Set oHttp = CreateObject("MSXML2.XMLHTTP") ' под MSXML2 не происходит редирект и возвращается просто текст soryanchik =)
'    If err.Number <> 0 Then
'        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
'        MsgBox "Error 0 has occured while creating a MSXML.XMLHTTPRequest object"
'    End If
'    On Error GoTo 0
'    If oHttp Is Nothing Then
'        MsgBox "For some reason I wasn't able to make a MSXML2.XMLHTTP object"
'        Exit Function
'    End If
 
oHttp.Open "GET", url, False
oHttp.setRequestHeader "X-Requested-With", "XMLHttpRequest" ' вот эта штуковина меня смущает
oHttp.setRequestHeader "Accept", "*/*"
oHttp.setRequestHeader "Referer", "http://www.mami.ru/rasp/edu/mami.php"
oHttp.setRequestHeader "Accept-Language", "ru-RU"
'oHttp.setRequestHeader "Accept-Encoding", "gzip, deflate"
oHttp.setRequestHeader "Accept-Encoding", "deflate" ' если делать без сжатия, то данные приходят в UTF-8, соотвественно кириллица возвращается знками ? прим.: <h2>124433 <span class='small'>?¦?µ??N?N? ????
oHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
oHttp.setRequestHeader "Connection", "Keep-Alive"
oHttp.setRequestHeader "Host", "www.mami.ru"
oHttp.setRequestHeader "Cookie", "group=124433; _ym_uid=1454618017546438182; _ym_isad=0; PHPSESSID=ria6tkja3i4pjuad7fvrh98m76"
 
oHttp.send
send_get = oHttp.responseText
End Function
 
кросспостинг: http://www.sql.ru/forum/1200948/zagruzka-stranicy-http-v-peremennuu-vba
KL
 
Цитата
KL написал: кросспостинг
На том форуме не могут по всей видимости помочь, решил здесь попытать удачу. Каков порядок? надо было там удалить вопрос, до того как размещать его здесь?
 
trexmernii,
Кросспостинг здесь не запрещен если предупреждаете См. правила :)

В чем проблема с кодом? У меня он возвращает кучу абракадабры, но у меня англ. кодировка. Что должно быть на выходе в переменной t?
KL
 
Скрытый текст
На выходе должно получиться просто код страницы HTML
 
Ну так я что-то в этом духе и получаю. Вам только с кодировкой надо разобраться:

Скрытый текст
KL
 
Цитата
KL написал: Вам только с кодировкой надо разобраться
Я писал об этом
Код
1
oHttp.setRequestHeader "Accept-Encoding", "deflate" ' если делать без сжатия, то данные приходят в UTF-8, соотвественно кириллица возвращается знками ? прим.: <h2>124433 <span class='small'>?¦?µ??N?N? ????
 
вот так надо:

Код
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
Sub ТекстВебСтраницы_вКодировке_UTF8()
    MsgBox send_get(URL$, "utf-8")
End Sub
 
Public Function send_get(ByVal URL$, Optional ByVal Encoding$) As String
    Dim oHttp As Object
    Set oHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
 
    oHttp.Open "GET", URL, False
    oHttp.setRequestHeader "X-Requested-With", "XMLHttpRequest"        ' вот эта штуковина меня смущает
    oHttp.setRequestHeader "Accept", "*/*"
    oHttp.setRequestHeader "Referer", "http://www.mami.ru/rasp/edu/mami.php"
    oHttp.setRequestHeader "Accept-Language", "ru-RU"
    oHttp.setRequestHeader "Accept-Encoding", "deflate"        ' если делать без сжатия, то данные приходят в UTF-8, соотвественно кириллица возвращается знками ? прим.: <h2>124433 <span class='small'>?¦?µ??N?N? ????
    oHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"
    oHttp.setRequestHeader "Connection", "Keep-Alive"
    oHttp.setRequestHeader "Host", "www.mami.ru"
    oHttp.setRequestHeader "Cookie", "group=124433; _ym_uid=1454618017546438182; _ym_isad=0; PHPSESSID=ria6tkja3i4pjuad7fvrh98m76"
 
    oHttp.Send
 
    If Len(Encoding$) Then
        With CreateObject("ADODB.Stream")
            Filename$ = Environ("tmp") & "\response.txt"
            .Charset = Encoding$: .Type = 1        ' adTypeBinary:
            .Open: .Write oHttp.ResponseBody
            .SaveToFile Filename$, 2
            .Type = 2        'adTypeText
            .LoadFromFile Filename$
            send_get = .ReadText
            .Close
        End With
    Else
        send_get = oHttp.ResponseText
    End If
End Function
 
Если делать со сжатием, то WinHttp.WinHttpRequest.5.1 его не разжимает.
MSXML2.XMLHTTP - умеет разжимать, но возвращает совершенно не то что нужно, потому как наверное не умеет "прокисровать".

Код
1
oHttp.setRequestHeader "Accept-Encoding", "gzip, deflate"
 
Цитата
KL написал: ЦенÑ?Ñ? по Ñ?абоÑ?е со сÑ?Ñ?Ð
хотя это похоже на нормальный текст, только закодированный. странно почему у меня приходят только знаки вопросов?
 
файл генерируемый кодом Игорь, даже у меня в кириллице:

Скрытый текст
KL
 
Игорь, спасибо! Отлично работает. Так понимаю без записи во временный файл не получится? на всякий случай добавил в процедуру Kill Filename$
Страницы: 1
Читают тему
Наверх
Loading...