Отпавить запрос POST

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Отпавить запрос POST

Сообщение alex-lev9 » 29.12.2005 (Чт) 10:52

Как реализовать запрос для страницы с кодом:

<form onsubmit="return(valid(this));" name="forum_log" method="post" class="0px" target="_self" action="/login-page">
логин
<br>
<input class="regform" name="login" maxlength="15" type="text">
<br>
пароль
<br>
<input class="regform" name="password" maxlength="20" type="password">
<br>
<input class="checkbxautor" name="remember" type="checkbox"><span style="position:relative;bottom:9">запомнить пароль и логин?</span>
<br>
<input value="вход" class="enter" name="login_ok" type="submit"><a class="10px" href="/remind-password">забыли пароль?</a>&nbsp;
<a class="10px" href="/register">регистрация нового пользователя</a>
</form>

Условие: запрос нужно отправить через Webbrowser, т.к. команды Winsock не проходят.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.12.2005 (Чт) 11:10

Ну тогда Forms(0).Submit
Lasciate ogni speranza, voi ch'entrate.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 29.12.2005 (Чт) 11:23

Э-э-э-э-э, таким образом я уже реализовал. Хотелось бы просто сделать это без загрузки страницы в Webbrowser.
Т.е., авторизироваться с запросом, а после авторизации вытащить нужную мне инфу и сохранить ее в моем документе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.12.2005 (Чт) 11:24

Ты уж определись, что тебе нужно, браузер или сокет.
Lasciate ogni speranza, voi ch'entrate.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 29.12.2005 (Чт) 12:15

:oops: Я еще молод и глуп, поэтому, возможно, не все адекватно понимаю и не всегда задаю корректные вопросы.
Для большего понимания обрисую ситуацию подробнее.
Я реализовал авторизацию, серфинг по разрешенным после авторизации страницам и копирование из них информации через Webbrowser. Как бы этот вариант меня устраивает, но я (по мере углубления в изучение VB и интернет технологий) увидел идею решения той же задачи другим путем - посылкой запросов правильной формы по нужным адресам. Попытался сделать запрос через Winsock - вышло через ж..., вернее не вышло никак (похоже проблемы с сервером - я в локальной сети).
Вот я и пришел к выводу, что запрос на авторизацию можно отправить через Webbrowser.Navigate(Postdata), запихнув в него логин и пароль. Таким образом хочу избавиться от загрузки хотя бы одной страницы www.xxxxx.ru/login-password

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.12.2005 (Чт) 13:23

Тебе нужно открыть какую-нибудь страницу, чтобы не вводить вручную имя и пароль (это будет делать программа)? Или тебе нужно взять какую-либо информацию со страницу, выход на которую возможен после ввода имени и пароля?
Если первое, то без компонента webbrowser тебе никак не обойтись.
Если второе, то сокет и GET/POST запросы тебя полностью устроят.
Проблема может быть только в случае, если на страницах для авторизации используются куки.
Lasciate ogni speranza, voi ch'entrate.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 29.12.2005 (Чт) 14:42

Я понял. Мой вариант - тот, который у меня уже имеется - через Webbrowser, так как сокет и GET/POST отсекаются сервером. Об этом я уже писал http://bbs.vbstreets.ru/viewtopic.php?t=22092 .
Посему больше парить мозги этой темой не имею права. Спасибо за помощь.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.12.2005 (Чт) 14:46

Если сокет и GET/POST отсекаются сервером, почему работает WebBrowser, который использует сокеты и GET/POST?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 29.12.2005 (Чт) 16:01

Ну, как бы, вывод насчет сервера я сделал сам, по той причине, что на домашнем компе с сокетами проблем у меня нет. А на рабочей машине, как я уже описывал, при отслеживании Winsock.state долго висит состояние 6, а затем 9 с кодом ошибки 10060.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.12.2005 (Чт) 16:02

Если на работе используется прокси-сервер, то запросы надо слать на него.
Lasciate ogni speranza, voi ch'entrate.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 30.12.2005 (Пт) 11:42

ЭВРИКА!
Оказывается - все тако просто решается. Законнектился с прокси, затем отправил запрос на нужный ресурс и получил ответ.
Большой рахмат за помощь.

Только теперь я не могу соединение порвать. У меня в диспетчере задач висит постоянно "IEXPLORE.EXE - 50% загрузки ЦП". Получается только перезагрузкой.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 30.12.2005 (Пт) 11:52

Прибей процесс :D Благо на IEXPLORE привелегии SE_DEBUG не требуется :)
Изображение

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 30.12.2005 (Пт) 12:25

Ты имеешь ввиду убить процесс из диспетчера задач?

Руками умею, а программно это сделать способ имеется?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 30.12.2005 (Пт) 12:34

TerminateProcess
Моду создают модоки, а распространяют модозвоны.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 30.12.2005 (Пт) 13:04

Спасибо, воспользуюсь.

В то время, как головы людей заняты вопросами подбора новогодних подарков :scratch: , попытаюсь найти в этих головах местечко и для моих глупых вопросов :pig: . Вот еще один из них.

Можно ли, открыв соединение и получив HEAD, не закрывая соединение, отправить GET. Поясню для чего. Есть один ресурс с программами ТВ каналов, при входе на который пользователю присваивается определенный ID, причем этот ID изменяется при каждом коннекте. В ответе на запрос HEAD этот ID находится в строке Set-Cookie:
При запросе GET мне необходимо в параметрах указать этот ID, и еще пару параметров. Но все это нужно делать без разрыва связи с сервером, иначе при следующем коннекте ID меняется на другой.

Если интересно - посмотрите сами www.vsetv.com

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.12.2005 (Пт) 13:12

Если соединяешься по HTTP/1.1, то можно указать серверу, чтобы он не разрывал соединение после ответа.
В HTTP/1.0 это невозможно.
Lasciate ogni speranza, voi ch'entrate.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 04.01.2006 (Ср) 13:06

Всех профессионалов и любителей поздравляю с Новым годом!

К делу. Заставил я Winsock отправлять запросы, не разрывая соединения. Но это мне не помогло :cry: . Оказывается, новый ID присваивается при каждом запросе (независимо от того, новое соединение устанавливается или запросы шлются в рамках одного соединения). А это идет вразрез с моими планами.

Теперь еще один вопрос. Отправив запрос, я получаю код, который помещаю в TextBox. Мне необходимо из этого кода вытащить содержимое одной таблицы. Данные у меня получены как String, а копаться в теле HTML-кода (как я понимаю) можно только в документе типа HTMLDocument. Можно ли произвести конвертирование? Или есть способ проще реализовать мой замысел?

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 04.01.2006 (Ср) 16:32

Еще одна проблема. Если данные POST отправить следующим образом:

Winsock1.SendData "selWeek=w_02012006&selName=33&selDay=0&selTime=2"

запрос проходит без проблем.
Если же я сделаю подстановку хотя бы одного параметра:

Dim dt As String
dt = "w_02012006"
Winsock1.SendData "selWeek=" & dt & "&selName=33&selDay=0&selTime=2"

в ответ приходит сообщение об ошибке.
В чем ошибка?

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 05.01.2006 (Чт) 15:50

Извините за настойчивость, но хотелось бы мне узнать следующее.
Могу ли я после получения ответа от сервера на мой запрос, получить доступ к телу ответа как к HTMLDocument. Мне нужно вытащить из ответа сервера информацию примерно такого плана:

document.getElementsByTagName("TABLE")(0).Cells(1).innerText

И так по всем ячейкам и по всем таблицам.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.01.2006 (Чт) 15:53

Ну да...
Отсекаешь заголовок, берёшь текст страницы. Если он был передан как chunked, склеиваешь куски и вырезаешь их длины...
Потом делаешь такую фигню...

Set mDocument = New HTMLDocument
CallByName mDocument, "write", VbMethod, text
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 05.01.2006 (Чт) 17:09

Гениально! Спасибо!

Но еще один мой вопрос остался без внимания. Почему я не могу сделать так:

Dim dt As String
dt = "w_02012006"
Winsock1.SendData "selWeek=" & dt & "&selName=33&selDay=0&selTime=2"

Почему выдается сообщение от сервера об ошибке?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.01.2006 (Чт) 17:29

& vbcrlf не забыл?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 05.01.2006 (Чт) 18:16

:oops: Первый класс, вторая четверть. Запутался с кавычками. Так что зря морочил голову. Спасибо за помощь.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 159

    TopList  
cron