powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Реализация http Get, Post запроса
18 сообщений из 18, страница 1 из 1
Реализация http Get, Post запроса
    #38530727
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте форумчане.
как организовать гет,пост? попробовал сделать 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
Реализация http Get, Post запроса
    #38530744
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Реализация http Get, Post запроса
    #38530757
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

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

в общем не особо наверное понятно обьяснил...(
по проще - как определить при ошибке доступа куда перенаправляет сервер?
...
Рейтинг: 0 / 0
Реализация http Get, Post запроса
    #38530837
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел способ решения данного запора. - использовать вместо msxml - WinHttpRequest
только еще вопрос есть. WinHttpRequest входит в состав windows? или это пришло с vb?
...
Рейтинг: 0 / 0
Реализация http Get, Post запроса
    #38530842
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Реализация http Get, Post запроса
    #38530860
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Реализация http Get, Post запроса
    #38530861
Фотография surbanec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сори опечатался

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

все сам разобрался . пост дата должна быть с vbcrlf на конце.
Спасибо большое за помощь. тема может считаться закрытой
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Реализация http Get, Post запроса
    #38941031
DarkSlavyanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Позвольте продолжить спрашивать, дабы не захламлять форум новыми топиками...
Есть информационно-справочная система в нашей организации. Доступ через веб-интерфейс. Все как обычно: открыли 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
Реализация http Get, Post запроса
    #38941047
ResponseText,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Вы пробовали подключатся этим кодом? Какой результат в ResponseText?

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

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

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


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


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

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

Спасибо за то, что откликнулись.
...
Рейтинг: 0 / 0
Реализация http Get, Post запроса
    #38941128
ResponseText,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Реализация http Get, Post запроса
    #38942012
DarkSlavyanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, вот результат выполнения команды:
Код: 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
Реализация http Get, Post запроса
    #38942024
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkSlavyaninВопрос: это я так понял, нужно "сэмулировать" кодом VBA все эти телодвижения по вкладкам веб-формы с сохранением и нажатием "Сформировать отчет"?достаточно, думаю, сэмулировать последний запрос, на который приходит ответ с нужными данными. Вряд ли все необходимые данные для формирования отчета хранятся в куках или сессии, скорее всего все они передаются с последним запросом.
...
Рейтинг: 0 / 0
Реализация http Get, Post запроса
    #38942091
DarkSlavyanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую... А если там все "последним действием" все получается (а там он через GET идет), его теоретически можно подменить на POST? Или там сервер задает игру, и такой запрос будет отвергнут? Илил серверу пофигу - он съест и POST, и GET (при условии верного синтаксиса)?
...
Рейтинг: 0 / 0
Реализация http Get, Post запроса
    #38942122
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может съест, а может и нет, все зависит от внутренней реализации.

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


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