Не могу передать данные POST'ом!!!

Программирование на Visual Basic for Applications
comp3v
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 27.11.2004 (Сб) 22:18

Не могу передать данные POST'ом!!!

Сообщение comp3v » 27.11.2004 (Сб) 22:29

Возникло сразу две проблемы.

Во-первых, надо послать кусок данных на интернет-страничку методом POST. Раньше пытался делать это через ActiveWorkbook.FollowHyperlink. И столкнулся с тем, что при попытке передать кусок больше приблизительно килобайта - вылезает "Out of memory"! В моём примере это выглядит так:
Код: Выделить всё
MyPostData = String(979, " ")
ActiveWorkbook.FollowHyperlink "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?SUBMIT=y", NewWindow:=True, ExtraInfo:=MyPostData, Method:=msoMethodPost

То есть, в реальности у меня, конечно, в MyPostData не куча пробелов, а какая-то осмысленная информация, но дело не в этом - при длине строки больше 978 байт получаю "Run-time error '7': Out of memory". (на самом деле когда как - иногда этот порог не 978, а больше либо меньше) Чего с этим сделать - не представляю.

Потом решил отказаться от .FollowHyperlink, стал использовать объект WebBrowser.
Делаю так:
Код: Выделить всё
Dim wb As WebBrowser
Set wb = CreateObject("InternetExplorer.Application")
MyURL = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?SUBMIT=y"
MyPostData = "orig_db=pubmed&cmd=Search&term=10684922"

wb.navigate MyURL, , , MyPostData
wb.Visible = True

В результате страничка открывается, но данные мои туда не передаются!!! Причём, если в последнем примере вызвать ActiveWorkbook.FollowHyperlink MyURL, NewWindow:=True, ExtraInfo:=MyPostData, method:=msoMethodPost, то это как раз сработает как надо...
ПОМОГИТЕ!!!


И второй вопрос - как программно сохранить выдаваемый файл. Т.е., в результате запроса сервер выдаёт не страничку для просмотра, а файл - и надо получить его содержимое (и желательно, чтобы пользователю не пришлось самому выбирать в диалоге "Открыть/Сохранить?").

Заранее спасибо!

Lider
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.06.2004 (Ср) 15:44
Откуда: Москва

Сообщение Lider » 09.03.2005 (Ср) 16:58

Недавно задавл подобный вопрос. Не ответив, меня послали в поиск...
Сказав, что подобные вопросы уже не раз обсуждались.

Вот удосужился до поиска и все что нашел, это данный пост без ответа.

Все таки может кто-нибудь знает ????
Моя задача отправить очень длинную строку методом POST скрипту
http://somesite.com/somescript.php
и, если возможно получить ответ в другую строку.
PLEASE HELP!!!
Есть 10 тпов людей:
Одни понимают двоичную систему исчисления,
Другие нет!

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 10.03.2005 (Чт) 4:59

http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/browser_control_node_entry.asp писал(а):The post data specified by PostData is passed as a SAFEARRAY Data Type structure. The variant should be of type Array and point to a SAFEARRAY Data Type. The SAFEARRAY Data Type should be of element type Integer, dimension one, and have an element count equal to the number of bytes of post data.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

dp_ua
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 22.08.2007 (Ср) 20:54

Сообщение dp_ua » 09.11.2007 (Пт) 13:04

Блин.... сколько гугля перелопатил, пока нашел то что надо. На этом форуме только и видишь кучи "умных" постов типа того, что выше, но превратить в реальный пример довольно трудно.

Вообщем я нашел, как можно передать пост данные.... точнее не совсем пост данные а залогинится на страничке, где просят ввести логин и пароль:

К примеру я загружаю такую страничку:

Код: Выделить всё
...
<form method="post" name="snd" action="login.php">

<input type="text" name="login" value="">
<input type="text" name="psw" value="">
<input type="image" value="login">
...


Мне нужно ввести логин и пароль и дальше зайти на страницу login.php по нажатию кнопки. Я сначала думал реализовать это при помощи
wb.navigate "/login.php"
и передать ему пост данные, но не получилось. Максимум что я нашел полезного - использовать винсок...но это неудобно в моем случае.

Вообщем делая так:
Код: Выделить всё
wb.Document.Forms("snd").elements("login").Value = "мой логин"
wb.Document.Forms("snd").elements("psw").Value = "пароль"
wb.Document.Forms("snd").submit


Я отправляю субмит нужной мне формы и открываю нужную страницу.
Все работает :)

может кому пригодится.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 09.11.2007 (Пт) 18:26

Я на www.coder-club.ru писал(а):В процессе изучения темы использовались программы (точнее плагины) LiveHTTPHeadersк Mozilla FireFox (перехватывает заголовки GET/POST запросов к серверу) и IEWatch к Internet Explorer'у (позволяет перехватить и исправить параметры, передаваемые в GET/POST запросах). Вот собственно и всё. Используя эти плагины можно составить любой запрос к любому серверу.

То есть идем в FAQ смотрим как надо реализовывать пост запрос. Потом скачиваем эти программы и плагины, и смотрим в какой форме передавать пост запросы (в LiveHTTPHeaders можно посмотреть заголовок запроса, а в IEWatch - сами передаваемые параметры). Потом просто забиваем это в свою программу и радуемся...[/url]
Подпись проходит рефакторинг

Li...Man
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 12.03.2008 (Ср) 17:43

Сообщение Li...Man » 12.03.2008 (Ср) 17:46

ещё один вариант пост передачи (и получения) данных

Set objXMLHTTP = CreateObject("Microsoft.XMLHTTP")

objXMLHTTP.Open "POST", sGetURL, False
objXMLHTTP.SetRequestHeader "Content-type", "text/xml"
objXMLHTTP.SetRequestHeader "Version", "HTTP/1.1"
objXMLHTTP.Send "" + request
response = objXMLHTTP.ResponseText

agat344
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 22.09.2003 (Пн) 15:57

Сообщение agat344 » 17.03.2008 (Пн) 17:26

Смотрите здесь - http://bbs.vbstreets.ru/viewtopic.php?t=34571&highlight=webbrowser
и больше не задавайте данный вопрос, а используйте поиск :D .

Li...Man
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 12.03.2008 (Ср) 17:43

Сообщение Li...Man » 17.03.2008 (Пн) 22:40

Мой вариант лучше


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 80

    TopList