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

Код: 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
10.08.2015, 10:59
    #39026064
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
MrVoid, спасибо за ответ.
Только как я понимаю, данный запрос просто скачивает исходный html код страницы, а мне нужно сначала послать данные на сервер (указать период выборки), а потом получить результат выборки (поэтому я и предполагаю, что запрос д.быть методом POST).
Я бы не заморачивался c xmlhttprequest, если бы мог распарсить html код страницы с результатами выборки, но на ней информации нет, ее видно только в DOMе. Поэтому и хочу попробовать через xmlhttprequest.
...
Рейтинг: 0 / 0
10.08.2015, 11:24
    #39026090
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
araz,

Вы умеете пользоваться отладчиком браузера?
Там на самом деле нужные вам данные не возвращаются в DOM. Сайт делает запрос, ответ возвращается в виде JSON. Зайдите в отладчик, в "сеть" и увидите, какой запрос отправляет сайт и какой ответ получает. Останется сымитировать этот запрос и разобрать JSON ответа
...
Рейтинг: 0 / 0
10.08.2015, 16:33
    #39026473
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Shocker.Pro,
Честно говоря, ни разу не пользовался. Буду признателен, если подскажете, как.
...
Рейтинг: 0 / 0
10.08.2015, 17:27
    #39026527
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Какой браузер?
...
Рейтинг: 0 / 0
10.08.2015, 17:47
    #39026536
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
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
10.08.2015, 17:51
    #39026542
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
дык все заголовки можно тоже из отладчика взять.

На самом деле, все довольно стандартно, ты можешь прям здесь на форуме поискать примеры по слову POST и/или XMLHTTP
...
Рейтинг: 0 / 0
10.08.2015, 18:07
    #39026551
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Shocker.Pro,
Ок, спасибо, буду искать)
...
Рейтинг: 0 / 0
19.08.2015, 17:20
    #39032638
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
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
19.08.2015, 17:46
    #39032662
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
1) Попробуйте открыть браузер лучше даже, наверное, в режиме "инкогнито" или вычистить предварительно все куки, относящиеся к этому сайту и через отладчик сымитировать этот post-запрос (без предварительного захода на страницу). Возможно, существует какая-то защита на стороне сервера, чтобы нельзя (или трудно) было бы сделать запрос минуя саму страницу сайта.

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

2) Каким-нить внешним сниффером (не посоветую что-то конкретное) сравните обмен данными с сервером из браузера и с помощью вашей программы. Возможно, вы что-нибудь упустили.
...
Рейтинг: 0 / 0
19.08.2015, 18:02
    #39032681
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Shocker.Pro,
Спасибо, попробую
...
Рейтинг: 0 / 0
21.08.2015, 13:53
    #39033953
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
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
21.08.2015, 14:11
    #39033979
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Но ведь вы брали заголовки запроса из трассировщика? Зачем что-то пытаться менять, надо максимально воспроизвести исходник?

Три моих совета вы пробовали?
...
Рейтинг: 0 / 0
21.08.2015, 14:47
    #39034026
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
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
21.08.2015, 14:49
    #39034028
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Скрин заголовков запроса
...
Рейтинг: 0 / 0
21.08.2015, 15:04
    #39034041
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
arazчто текст запроса трассировщика выглядит следующим образомarazа мой запрос выглядит так:ваша задача воспроизвести этот запрос, или я чего-то не понимаю
...
Рейтинг: 0 / 0
21.08.2015, 15:49
    #39034082
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
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
21.08.2015, 17:15
    #39034143
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
arazругается на синтаксис.ну так тогда надо с синтаксисом разбираться, а не задачу извращать )))

Если хотите использовать кавычки внутри текстового литерала, их нужно задваивать
...
Рейтинг: 0 / 0
21.08.2015, 17:26
    #39034153
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
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
25.08.2015, 17:46
    #39035873
araz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XMLHTTPREQUEST как правильно написать запрос на VBA
Shocker.Pro,

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

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

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


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