Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализация http Get, Post запроса / 18 сообщений из 18, страница 1 из 1
18.01.2014, 23:19
    #38530727
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Здравствуйте форумчане.
как организовать гет,пост? попробовал сделать get запрос через MSXML2.XMLHTTP
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim http As Object
    Set xmlHttp = CreateObject("MSXML2.XmlHttp")
    xmlHttp.Open "GET", "http://yandex.ru", False
    xmlHttp.Send
    GetHTMLSource = xmlHttp.responseText
    Set xmlHttp = Nothing
 Text1.Text = GetHTMLSource


в итоге ругается рантайм ошибкой 'отказано в доступе' на xmlHttp.Send

помогите разобраться с этим. может есть ошибки, либо может есть другие способы реализации запросов?
...
Рейтинг: 0 / 0
18.01.2014, 23:53
    #38530744
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
...
Рейтинг: 0 / 0
19.01.2014, 00:35
    #38530757
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Shocker.Pro,

ну и как эту проблему можно обойти?
кстати а если сделать через api будет такой же результат?
...
Рейтинг: 0 / 0
19.01.2014, 01:41
    #38530785
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
дык блин - запрашивать www.yandex.ru
...
Рейтинг: 0 / 0
19.01.2014, 02:32
    #38530809
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Shocker.Pro,
ну так то да. только вот как именно определить почему сервер откинул соединение и как определить что ему нужно?
допустим мы конектимся к yandex.ru при ошибке программно перевести загрузку туда кудда нужно т.е. на www.yandex.ru
или допустим так - http://mail.yandex.ru вылетит ошибка доступа и программно определить от сервера что нужно сделать перевод на https://mail.yandex.ru/

в общем не особо наверное понятно обьяснил...(
по проще - как определить при ошибке доступа куда перенаправляет сервер?
...
Рейтинг: 0 / 0
19.01.2014, 03:41
    #38530837
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
нашел способ решения данного запора. - использовать вместо msxml - WinHttpRequest
только еще вопрос есть. WinHttpRequest входит в состав windows? или это пришло с vb?
...
Рейтинг: 0 / 0
19.01.2014, 03:53
    #38530842
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Command2_Click()
On Error Resume Next

Dim http As Object
    Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    XMLHTTP.Open "GET", "http://yandex.ru/", True
    XMLHTTP.send
    XMLHTTP.waitForResponse = True
    GetHTMLSource = XMLHTTP.responseText
    Set XMLHTTP = Nothing
 Text1.Text = GetHTMLSource
End Sub


вот что у меня получилось. загрузка в асинхронном режиме с ожиданием загрузки данных с сервера.
...
Рейтинг: 0 / 0
19.01.2014, 06:48
    #38530860
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Public Function InetPOST(ByVal url As String, ByVal pstData As String) As String
On Error Resume Next
Dim HTMLSource As String
If Trim(UserAgent) = "" Then UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 ( .NET CLR 3.5.30729)"
Set XMLHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
XMLHTTP.Open "POST", url, True
XMLHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
XMLHTTP.setRequestHeader "Content-Length", Len(pstData)
XMLHTTP.setRequestHeader "Cache-Control", "no-store, no-cache"
XMLHTTP.setRequestHeader "Pragma", "no-cache"
XMLHTTP.setRequestHeader "User-agent", UserAgent
XMLHTTP.setRequestHeader "Referer", Referer
XMLHTTP.send
XMLHTTP.waitForResponse = True
HTMLSource = XMLHTTP.responseText
Set XMLHTTP = Nothing
InetPOST = HTMLSource

End Function


написал на пост запрос, однако не работает. параметры не передаются. параметры должны кодироваться? помогите исправить ошибку с постом?
...
Рейтинг: 0 / 0
19.01.2014, 06:49
    #38530861
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
сори опечатался

XMLHTTP.send pstData
...
Рейтинг: 0 / 0
19.01.2014, 07:10
    #38530862
surbanec
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Shocker.Pro,

все сам разобрался . пост дата должна быть с vbcrlf на конце.
Спасибо большое за помощь. тема может считаться закрытой
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.04.2015, 20:14
    #38941031
DarkSlavyanin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Всем привет!
Позвольте продолжить спрашивать, дабы не захламлять форум новыми топиками...
Есть информационно-справочная система в нашей организации. Доступ через веб-интерфейс. Все как обычно: открыли url, появилась форма авторизации (https), ввели логин/пароль. Появилась форма, позволяющая ввести условия для вывода статистических данных: временной период, различные текстовые и числовые фильтры и т.п.
В итоге имеем страничку с табличными данными, как в базе данных.

Система проектировалась только для IE версии не выше 8, для работы требует установленных библиотек MSXML4.0.
Может это важно.

Задача такова: создать клиентскую часть на базе формы access, чтобы из нее делать запросы и получать данные в заранее созданную таблицу.

Перерыл форум, но вот как обычно бывает - нет четкого ответа. Не получается построить целостную картину вопроса, прочитав кучу статей и примеров.
Начал с того, что установил HHTPAnalyzer, дабы понять, что браузер делает с ресурсом. Картина такова, что на сервере действует механизм PRG (POST-REDIRECT-GET):
1. происходит авторизация методом POST.
2. сервер выдает referer и куки на новый ресурс и переводит туда пользователя.
3. пользователь формирует условия отбора в появившейся веб форме и нажимает "сформировать отчет". Появляется табличка со статистическими данными.
4. я не знаток веб-серверных технологий, там информация выдается с исходным кодом такого вида (это фрагмент):

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<body>
</tr>
	<tr class=tr2>
		<td class=tdCT>1</td>
		<td class=tdRT>7409,00</td>
		<td class=tdCT>кг</td>
		<td class=tdRT>7409,00</td>
		<td class=tdRT>1 186 460,65</td>
		<td class=tdRT>160,14</td>
		<td class=tdRT>160,14</td>
		<td class=tdRT>34836,27</td>
		<td class=tdRT>4,70</td>
		<td class=tdRT>4,70</td>
		<td class=tdRT>12069,52</td>
		<td class=tdRT>12069,52</td>
		<td class=tdRT>1,63</td>
		<td class=tdRT>1,63</td>
</tr>



Т.е. явно это поддается парсингу. Возможно, тут даже голову ломать не придется и это сформировано по стандарту XML (не придется делать текстовый парсинг "в лоб").

Собственно, вопросы по существу:

1. Как реализовать PRG в vba? Т.е. есть конструкция:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim Xmlhtp As MSXML2.XMLHTTP
Dim str As String

Set Xmlhtp = New MSXML2.XMLHTTP

With Xmlhtp
.Open "POST", "url", False "login", "pwd"
.Send str


Как ее "допилить", чтобы после нее на основе полученных куков (или кук, тут по ходу все непросто) и рефера сделать редирект?

2. Как формируется переменная "str" в вышеприведенном коде? Она вообще там нужна? На этом шаге мы сообщаем серверу только url/логин/пароль.

3. Как в коде vba передать серверу условия отбора после редиректа? Я так понял, нужно применять метод
Код: vbnet
1.
Xmlhtp.setRequestHeader


Как узнать, какие вообще там условия можно передать и как они называются? Смотреть лог сниффера?

4. Как результат запихнуть в таблицу access? Ну т.е. что сформировать recordset - это понятно. Но как выдернуть именно тело с данными из полученного массива?

5. И последнее. Понятно, что есть GET и POST директивы... Понятно, что POST - эти типа ГЕТ, но "ширше" по возможностям.
Правильно ли я понимаю, что без GET можно вообще обойтись? Вопрос не в общем, а только применительно к моей задачке.

Просьба не ругаться, прочитал уже немало материалов, но везде обрывки. Про реализацию на vba PRG не нашел понятной информации.
Спасибо откликнувшимся!
...
Рейтинг: 0 / 0
20.04.2015, 20:46
    #38941047
ResponseText,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
1. Вы пробовали подключатся этим кодом? Какой результат в ResponseText?

2. При авторизации, таким способом (через MSXML2.XMLHTTP) - не нужна. При использовании других объектов - может быть нужна
17068356

3. Если передача условий идёт по GET (а вы говорите, что так) то просто.
Покажите какой URL после этих действий
DarkSlavyaninпользователь формирует условия отбора в появившейся веб форме и нажимает "сформировать отчет". Появляется табличка со статистическими данными.

4. Самое простое, - Split-ом поразбивать и сохранить через рекордсет.
Но можно и "красивее" сделать - сохранить в лок.файл и запросом к таблице на HTTP-странице вытянуть всё за раз.
... или, если повезёт - вгрузить ResponseText в XMLDocument и из него перегнать в рекордсет.
...
Рейтинг: 0 / 0
20.04.2015, 22:06
    #38941096
DarkSlavyanin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
ResponseText, у меня это чудо на работе, завтра смогу дать дополнительную информацию по Вашим вопросам.
Одно помню, пробовал для контроля:
Код: vbnet
1.
MsgBox Xmlhtp.responseText


Но вменяемых данных там не было (ну т.е. типа XML-узлов таблицы тех самых статистических данных). Был какой-то фрагмент, начинался с узла/тега типа
Код: xml
1.
<!DOCUMENT>


Сдается мне, высылаются данные первой формы авторизации (которая предваряет основную форму).
Дальше убейте - не помню. Завтра скриншоты по всем вопросам запостю.ее
А что с PRG? Можно как-то "схватить" куки/реферы, чтобы использовать их как ключик ко второй (основной) веб форме (в которой все фильтры и настраиваются)?

Насчет DomDocument - на это у меня большие надежды Очень похоже (я практически уверен), что структура XML там задействована. Это, ведь и есть DomDocument, когда в коде HTML идет врезка XML - структуры?
Вручную писать механизм импорта из исходного кода HTTP-страницы не очень охота.

Спасибо за то, что откликнулись.
...
Рейтинг: 0 / 0
20.04.2015, 23:00
    #38941128
ResponseText,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
DarkSlavyanin Можно как-то "схватить" куки/реферы, чтобы использовать их как ключик ко второй (основной) веб форме (в которой все фильтры и настраиваются)?
Можно. Вроде так
Код: vbnet
1.
strCookie = Xmlhtp.GetResponseHeader("Set-Cookie")

Только я не понимаю зачем? Этот Xmlhtp, после
Код: vbnet
1.
.Open "POST", "url", False "login", "pwd"

уже, так сказать, "авторизирован" и, дальше, просто нужно "заслать" нужный GET (если формирование страницы с результатам действительно по GET) с правильными параметрами. Что-то в духе такого должно быть
Код: vbnet
1.
.Open "GET", "http://myurl.com?param1=value1¶m2=value2&..." 


DarkSlavyanin Насчет DomDocument - на это у меня большие надежды Очень похоже (я практически уверен), что структура XML там задействована. Это, ведь и есть DomDocument, когда в коде HTML идет врезка XML - структуры?Да, вообщем и HTML-страница, тоже DomDocument, только она редко "валидна" для MSXML2.DomDocument.
Но если Response на GET действительно XML-документ, тогда "шансов" для MSXML2.DomDocument поболе :)
...
Рейтинг: 0 / 0
21.04.2015, 20:59
    #38942012
DarkSlavyanin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Так, вот результат выполнения команды:
Код: vbnet
1.
2.
3.
.Open "POST", "url", False "login", "pwd"
.send
MsgBox Xmlhtp.responseText



Еще раз прошелся HTTPAnalyzer'ом, понял, что веб-база работает таким образом:
1. Щелкаем url и попадаем на форму, которая предлагает ввести логин/пароль и нажать "Ок".
2. После авторизации попадаем на форму с тремя вкладками. На первой задаем условия-фильтры, нажимаем "Сохранить".
Переходим (вручную) на вторую вкладку, там устанавливаем дополнительные фильтры. Нажимаем "Сохранить", а потом "Сформировать отчет".
3. Переходим на третью вкладку и периодически нажимаем кнопку "Обновить" (не в браузере, а именно в форме). В зависимости от числа записей в результирующей таблице, время проходит от десятка секунд до пары-тройки минут. В результате появляется сама табличка. Исходный код сохраненной странички с этой таблице и содержит требуемые данные, которые предположительно буду парсить.

Учитывая, такой длинный путь задания условий, HTTPAnalyzer показывает целую серию транзакций из POST и GET.
Вопрос: это я так понял, нужно "сэмулировать" кодом VBA все эти телодвижения по вкладкам веб-формы с сохранением и нажатием "Сформировать отчет"? Или есть вариант забабахать все условия одним махом в директиве POST?
...
Рейтинг: 0 / 0
21.04.2015, 21:16
    #38942024
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
DarkSlavyaninВопрос: это я так понял, нужно "сэмулировать" кодом VBA все эти телодвижения по вкладкам веб-формы с сохранением и нажатием "Сформировать отчет"?достаточно, думаю, сэмулировать последний запрос, на который приходит ответ с нужными данными. Вряд ли все необходимые данные для формирования отчета хранятся в куках или сессии, скорее всего все они передаются с последним запросом.
...
Рейтинг: 0 / 0
22.04.2015, 07:17
    #38942091
DarkSlavyanin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Попробую... А если там все "последним действием" все получается (а там он через GET идет), его теоретически можно подменить на POST? Или там сервер задает игру, и такой запрос будет отвергнут? Илил серверу пофигу - он съест и POST, и GET (при условии верного синтаксиса)?
...
Рейтинг: 0 / 0
22.04.2015, 08:56
    #38942122
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация http Get, Post запроса
Может съест, а может и нет, все зависит от внутренней реализации.

Раз последний запрос идет GET-ом, стало быть, в строке запроса должны оказаться все нужные параметры для фильтра и т.п. На взгляд - это так? Попробуйте просто вбить в браузер эту строку и посмотреть на результат (после логина, естественно)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализация http Get, Post запроса / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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