Страница: 1 |
Страница: 1 |
Вопрос: Послать HTTP-пакет серверу и получить ответ
Добавлено: 22.04.05 17:54
Автор вопроса: ZagZag | ICQ: 295002202
Я все не могу выбрать: каким способом организовать эту процедуру (сабж)
Пользую Microsoft Internet Transfer Control 6.0 (MSINET.OCX), но при
выгрузке программы VB-IDE подвисает, а иногда вообще вылетает :(
Как недавно убедился использование АПИ WinInet.dll дает тот же
результат (по крайней мере такое же подвисание)
Winsock: Сложно организовывается процедура отправки-приема пакета. Тем более
нужно както (незнаю пока как) узнать по URL имя сервера к которому
коннектиться.
WinSock API & Tyaga (DaSharm) еще не пробовал, но сложность как с винсоком
WebBrowser... ну мне бы побыстрее получать, а эта %%%ня тормознута на это
дело.
Подскажите как избавиться от описанных выше странностей Inet или может
перейти на WinSock?
С WinSock я более-менее знаком, но как же получить имя сервера?
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 22.04.05 18:00
Отрезаешь спереди http://, сзади все до крайнего слева слеша, потом gethostbyname
Номер ответа: 2
Автор ответа:
DaSharm_tmp
ICQ: 780477
Вопросов: 2
Ответов: 23
Web-сайт:
Профиль | | #2
Добавлено: 22.04.05 20:35
Используй библиотеки сторонних разработчиков.
Номер ответа: 3
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #3
Добавлено: 22.04.05 20:40
это WinSock'овская функция?
2 DaSharm_tmp:
а какие например можно юзать? на VBNET есть такие или ссылки на них?
ЗЫ: С возвращением!
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #4
Добавлено: 22.04.05 22:10
'// ô-öèÿ äëÿ óçíàâàíèÿ IP àäðåñà ïî èìåíè.
'// âçÿòî íà sources.ru
Dim nbytes As Long
Dim ptrHosent As Long
Dim ptrName As Long
Dim ptrAddress As Long
Dim ptrIPAddress As Long
Dim sAddress As String
sAddress = Space$(4)
ptrHosent = GetHostByName(sHostName & vbNullChar)
If ptrHosent <> 0 Then
ptrAddress = ptrHosent + 12
CopyMemory ptrAddress, ByVal ptrAddress, 4
CopyMemory ptrIPAddress, ByVal ptrAddress, 4
CopyMemory ByVal sAddress, ByVal ptrIPAddress, 4
GetIPFromHostName = IPToText(sAddress)
End If
End Function
Private Function IPToText(ByVal IPAddress As String) As String
'// âñïîìîãàòåëüíàÿ ô-öèÿ äëÿ GetIPFromHostName
IPToText = CStr(Asc(IPAddress)) & "." & _
CStr(Asc(Mid$(IPAddress, 2, 1))) & "." & _
CStr(Asc(Mid$(IPAddress, 3, 1))) & "." & _
CStr(Asc(Mid$(IPAddress, 4, 1)))
End Function
Не моё. Первоначального автора не знаю, но счас этого кода стока везде лежит, что можно считать его общим.
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 22.04.05 22:30
Блин! чё с коментприями???? я сегодня тоже с русскими буквами выложил код такая же ботва
боюсь человек не разберёт зачем я там цикл влепил
Номер ответа: 6
Автор ответа:
DaSharm_tmp
ICQ: 780477
Вопросов: 2
Ответов: 23
Web-сайт:
Профиль | | #6
Добавлено: 22.04.05 22:57
Моя функция меньше и лучше
Public Function GetIPfromNetName(NetName As String) As String
'© DaSharm ICQ: 780477
 im gv As Long
 im an As hostent
 im IPaddr As Long
 im tmpIPAddr(3) As Byte
gv = gethostbyname(Trim(NetName))
If gv = 0 Then Exit Function
CopyMemory an, ByVal gv, Len(an)
CopyMemory IPaddr, ByVal an.hAddrList, 4
CopyMemory tmpIPAddr(0), ByVal IPaddr, 4
GetIPfromNetName = tmpIPAddr(0) & "." & tmpIPAddr(1) & "." & tmpIPAddr(2) & "." & tmpIPAddr(3)
End Function
Номер ответа: 7
Автор ответа:
DaSharm_tmp
ICQ: 780477
Вопросов: 2
Ответов: 23
Web-сайт:
Профиль | | #7
Добавлено: 22.04.05 22:59
ты что имеешь ввиду?
Номер ответа: 8
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #8
Добавлено: 27.04.05 06:31
Я имею в виду из запроса
http://www.mail.ru - mail.ru
http://mail.ru - mail.ru
(Может это два разных имени?)
Что? Только имя сервера выцепить можно только методом "обрезания"?
Я тут поэкспериментировал и нашел что WinSock работает вполне прилично, но
после множественного обращения к серверу TCPView показывает что остается
куча "ждущих" соединений системы - это не есть гуд, как это можно
поправить - как првильно завершать работу с сервером.
Номер ответа: 9
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #9
Добавлено: 27.04.05 20:41
Давно это - не помню счас, но я по-моему тоже сталкивался с проблемой узнавания "когда страница загрузилась". Потом отказался от Keep-Alive и сервак вроде сам стал обрывать связь по окончании пересылки.
По имени сервера:
Ясно как день, что это разные имена.
А почему у тебя напротив
http://www.mail.ru стоит mail.ru?
ты же обрежешь тока http у тебя должен www.mail.ru остаться. Вот и узнавай его ip. Хотя я даже и этого не делал, насколько я помню, винсок сам ip пробивает.
А про комментарии: сдаётся мне что таким образом нам выливается недавний хак. Авторы так вот грубо решили вопросы безопасности. 8)
Номер ответа: 10
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #10
Добавлено: 28.04.05 05:49
Connection: Keep-alive
В отправляемом пакете? Попробую, не делал.
WinSock.Close при этом вызывать не надо?
Номер ответа: 11
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #11
Добавлено: 28.04.05 19:26
Наоборот: Connection: Close
Тогда сервер должен обрывать связь, когда всё пошлёт. Тока что открыл свой старый исходник - работает, но глюкаво - иногда не полностью страница загружается...
Номер ответа: 12
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #12
Добавлено: 29.04.05 06:09
Вышли мне плз твой исходник. У меня вся страница откроется, т. к. ее размер
от 1 до 500 байт.