powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / XMLHTTPREQUEST как правильно написать запрос на VBA
24 сообщений из 24, страница 1 из 1
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39025060
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане!
Пытаюсь получить с сайта http://kad.arbitr.ru выборку дел по определенным датам.
Сама выборка загружается скриптом jQuery на текущей странице (после того, как выбран период выборки и нажата кнопка "Найти"). После формирования выборки в коде HTML страницы тегов с результатами нет, НО их видно в DOMе.
Почитал в инете по данному вопросу и сделал вывод, что нужно отправить на сайт XMLHTTPREQUEST запрос методом POST (в котором указать период выборки), получить результат в формате XML, а потом его распарсить.
1) Правильно ли я понимаю, что таким способом можно получить инфу из DOM документа страницы?
2) Как правильно написать запрос XMLHTTPREQUEST на VBA, чтобы получить результат запроса, а не пустую строку (т.е. каким должен быть синтаксис запроса, что писать в setRequestHeader и т.п.)?
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39025400
MrVoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub FFF()

    Dim req As MSXML2.XMLHTTP60
    
    Set req = New MSXML2.XMLHTTP60
    req.Open "GET", "http://kad.arbitr.ru", False
    req.Send
    
    If Not req.Status = 200 Then Exit Sub
    
    MsgBox req.responseText
    Set req = Nothing

End Sub
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026064
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrVoid, спасибо за ответ.
Только как я понимаю, данный запрос просто скачивает исходный html код страницы, а мне нужно сначала послать данные на сервер (указать период выборки), а потом получить результат выборки (поэтому я и предполагаю, что запрос д.быть методом POST).
Я бы не заморачивался c xmlhttprequest, если бы мог распарсить html код страницы с результатами выборки, но на ней информации нет, ее видно только в DOMе. Поэтому и хочу попробовать через xmlhttprequest.
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026090
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
araz,

Вы умеете пользоваться отладчиком браузера?
Там на самом деле нужные вам данные не возвращаются в DOM. Сайт делает запрос, ответ возвращается в виде JSON. Зайдите в отладчик, в "сеть" и увидите, какой запрос отправляет сайт и какой ответ получает. Останется сымитировать этот запрос и разобрать JSON ответа
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026473
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Честно говоря, ни разу не пользовался. Буду признателен, если подскажете, как.
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026527
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой браузер?
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026536
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
IE

Только что нашел отладчик
Запрос отправляется методом POST посредством XMLHTTP.
Вижу заголовок и текст запроса.
Текст запроса:
{"Page":1,"Count":25,"Courts":[],"DateFrom":"2015-01-01T00:00:00","DateTo":"2015-01-01T23:59:59","Sides":[],"Judges":[],"CaseNumbers":[],"WithVKSInstances":false}

Получается, для имитации запроса мне нужно сначала написать что-то в заголовок запроса (Setrequestheader), а потом текст запроса - и все это взять из отладчика. Cинтаксис запроса я знаю, не понятно, что конкретно писать в заголовках и тексте запроса (т.е. как переложить записи отладчика в текст кода VBA). Сможете помочь?
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026542
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык все заголовки можно тоже из отладчика взять.

На самом деле, все довольно стандартно, ты можешь прям здесь на форуме поискать примеры по слову POST и/или XMLHTTP
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39026551
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Ок, спасибо, буду искать)
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39032638
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Попробовал сымитировать XMLHTTP запрос на основании записей отладчика (сымитировал заголовки и текст запроса).
В итоге получаю текст "Ведутся технические работы".
Ответ сервера, который выдает отладчик IE, имеет вид:
Код: javascript
1.
{"Result":{"PagesCount":1,"Page":1,"PageSize":25,"TotalCount":1,"Items":[{"CaseId":"0b5f8c11-74c1-4c29-ae51-ac515424dcd0","CaseNumber":"А34-1796/2015","CaseType":"Г","CourtName":"АС Курганской области","Date":"2015-01-01T00:00:00","Plaintiffs":{"Count":1,"Participants":[{"Name":"Комитет по управлению муниципальным имуществом Администрации города Шадринска","Inn":"4502000330","Address":"641870, Россия, г Шадринск, Курганская обл, ул Свердлова, 59","OrganizationForm":null,"SubjectCategories":["f3dc4121-9ded-4ac4-b329-80bb06eef1c9"]}]},"Respondents":{"Count":1,"Participants":[{"Name":"ООО \"УК Энергострой\"","Inn":"4502026539","Address":"641878, Россия, г Шадринск, Курганская обл, ул. Октябрьская, 110","OrganizationForm":"5f468142-1394-4b88-88ac-8d79c4ba9600","SubjectCategories":["f3dc4121-9ded-4ac4-b329-80bb06eef1c9"]}]},"IsSimpleJustice":false,"Judge":"Асямолов В. В."}]},"Message":"","Success":true,"ServerDate":"2015-08-19T17:16:34","Timings":null}



Прошу подсказать, что неправильно написал в коде (привожу ниже)
Код: vbnet
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 getinfo()
 Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
    xmlhttp.Open "POST", "http://kad.arbitr.ru/", "false"
    'xmlhttp.SetRequestHeader "Çàïðîñ", "POST /Kad/SearchInstances HTTP/1.1"
    xmlhttp.SetRequestHeader "x-date-format", "iso"
    xmlhttp.SetRequestHeader "Content-Type", "application/json"
    xmlhttp.SetRequestHeader "X-Requested-With", "XMLHttpRequest"
    xmlhttp.SetRequestHeader "Accept", "application/json, text/javascript, */*"
    xmlhttp.SetRequestHeader "Referer", "http://kad.arbitr.ru/"
    xmlhttp.SetRequestHeader "Accept-Language", "ru-RU"
    xmlhttp.SetRequestHeader "Accept-Encoding", "gzip, deflate"
    xmlhttp.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko"
    xmlhttp.SetRequestHeader "Host", "kad.arbitr.ru"
    xmlhttp.SetRequestHeader "Content-Length", "162"
    xmlhttp.SetRequestHeader "DNT", "1"
    xmlhttp.SetRequestHeader "Connection", "Keep-Alive"
    xmlhttp.SetRequestHeader "Cache-Control", "no-cache"
    xmlhttp.SetRequestHeader "Cookie", "CUID=784f82f6-8a37-448a-833c-55c98b58b8a1:A8FzsrIpNSTAihM7ovXR9g==; __utma=228081543.708609631.1437807256.1439492003.1439851232.6; __utmz=228081543.1437807256.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASP.NET_SessionId=bseikmsxrvr1yadga3s5dgal; __utmb=228081543.2.10.1439851232; __utmc=228081543; __utmt=1"
    
    Dim POST() As Byte, PostData As String
    PostData = "Page=1&Count=25&Courts=[]&DateFrom=2015-01-01T00:00:00&DateTo=2015-01-01T23:59:59&Sides=[]&Judges=[]&CaseNumbers=[]&WithVKSInstances=false"
    'PostData = "DateFrom=2015-08-01T00:00:00&DateTo=2015-08-01T23:59:59"
    POST = StrConv(PostData, vbFromUnicode)
    
    xmlhttp.Send (POST)
    'xmlhttp.Send (PostData)
    Do While xmlhttp.readystate <> 4
    DoEvents
    Loop
    'If Val(xmlhttp.Status) <> 200 Then Exit Sub
    'If xmlhttp.Status = 200 Then
    MsgBox xmlhttp.ResponseText
    'End If
    Set xmlhttp = Nothing
    
              
End Sub
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39032662
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Попробуйте открыть браузер лучше даже, наверное, в режиме "инкогнито" или вычистить предварительно все куки, относящиеся к этому сайту и через отладчик сымитировать этот post-запрос (без предварительного захода на страницу). Возможно, существует какая-то защита на стороне сервера, чтобы нельзя (или трудно) было бы сделать запрос минуя саму страницу сайта.

1а) Проверьте куки, отправляемые браузером. Возможно, они разные, возможно они идентифицируют сессию, возможно содержат защитный токен. (см. свой xmlhttp.SetRequestHeader "Cookie")

2) Каким-нить внешним сниффером (не посоветую что-то конкретное) сравните обмен данными с сервером из браузера и с помощью вашей программы. Возможно, вы что-нибудь упустили.
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39032681
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Спасибо, попробую
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39033953
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Я видимо понял, в чем дело: в заголовке запроса я пишу
Код: vbnet
1.
xmlhttp.SetRequestHeader "Content-Type", "application/json"


при этом сам запрос явно не json:
Код: vbnet
1.
PostData = "Page=1&Count=25&Courts=[]&DateFrom=2015-01-01T00:00:00&DateTo=2015-01-01T23:59:59&Sides=[]&Judges=[]&CaseNumbers=[]&WithVKSInstances=false"



Не подскажете, в каком направлении дальше двигаться:
1) искать, какую кодировку указать в заголовке и как закодировать текст запроса
2) попробовать (если это возможно) написать сам текст запроса (то, что внутри PostData) на json
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39033979
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но ведь вы брали заголовки запроса из трассировщика? Зачем что-то пытаться менять, надо максимально воспроизвести исходник?

Три моих совета вы пробовали?
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39034026
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Я попробовал Ваши варианты, также посмотрел, что выдает трассировщик chrome- все то же самое.
Дело в том, что текст запроса трассировщика выглядит следующим образом
Код: javascript
1.
{"Page":1,"Count":25,"Courts":[],"DateFrom":"2015-01-01T00:00:00","DateTo":"2015-01-01T23:59:59","Sides":[],"Judges":[],"CaseNumbers":[],"WithVKSInstances":false}


а мой запрос выглядит так:
Код: vbnet
1.
PostData = "Page=1&Count=25&Courts=[]&DateFrom=2015-01-01T00:00:00&DateTo=2015-01-01T23:59:59&Sides=[]&Judges=[]&CaseNumbers=[]&WithVKSInstances=false"


Как по-другому написать запрос, я пока не знаю.
Если отправлять пустой запрос
Код: vbnet
1.
PostData = ""


текс ответа такой:
Код: javascript
1.
{"Result":"","Message":"","Success":true,"ServerDate":"2015-08-21T14:45:48","Timings":null}


Из всего этого я сделал вывод, что дело именно в написании текста запроса.
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39034028
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скрин заголовков запроса
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39034041
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arazчто текст запроса трассировщика выглядит следующим образомarazа мой запрос выглядит так:ваша задача воспроизвести этот запрос, или я чего-то не понимаю
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39034082
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Может я задаю глупые вопросы, т.к. в программировании я пока новичок
Браузер посылает запрос в формате json, что видно из скрина, а я пишу запрос на visual basic, т.е. я должен написать запрос, понятный visual basic.
Я пробовал писать:
Код: vbnet
1.
PostData = "{"Page":1,"Count":25,"Courts":[],"DateFrom":"2015-01-01T00:00:00","DateTo":"2015-01-01T23:59:59","Sides":[],"Judges":[],"CaseNumbers":[],"WithVKSInstances":false}"


т.е. 100% повторить текст запроса, но редактор VBA ругается на синтаксис.

Убедительно прошу помочь разобраться.
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39034143
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arazругается на синтаксис.ну так тогда надо с синтаксисом разбираться, а не задачу извращать )))

Если хотите использовать кавычки внутри текстового литерала, их нужно задваивать
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39034153
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arazно редактор VBA ругается на синтаксис.
Код: vbnet
1.
PostData = "{""Page"":1,""Count"":25,""Courts"":[],""DateFrom"":""2015-01-01T00:00:00"",""DateTo"":""2015-01-01T23:59:59"",""Sides"":[],""Judges"":[],""CaseNumbers"":[],""WithVKSInstances"":false}"
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39035873
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Спасибо за помощь, все получилось!!!

Остался последний нерешенный вопрос:

Результат возвращается в формате json, есть ли способ его преобразовать(или сохранить в нужном формате), чтобы можно было потом разобрать методом GetElementsByTagName или Queryselector ?
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39035878
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гугл в помощь.
Сходу нашел вот это
http://vbbook.ru/visual-basic/-vb6-json-parser/
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39036131
araz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Еще раз спасибо за помощь!!!! Ссылка рабочая, распарсил свой json
Тему можно закрывать
...
Рейтинг: 0 / 0
XMLHTTPREQUEST как правильно написать запрос на VBA
    #39036144
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рад, что удалось помочь!
Честно говоря, всё, что я здесь советовал, я никогда не делал сам
Вы проделали большую работу )
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / XMLHTTPREQUEST как правильно написать запрос на VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]