Страница: 1 | 2 | 3 |
Вопрос: Код не работает из библиотеки кодов.
Добавлено: 25.08.04 00:28
Автор вопроса: CyRax | Web-сайт:
Речь идёт о получении html текста из интернета через API.
У меня тестбокс всегда пустой.
Может кто поделится рабочим примером? Только не от IE.
Достали меня эти браузеры. Хочу чтобы совсем быстро страница грузилась. Вот думаю через блокнот смотреть или окошко RichEdit'а создать на крайняк.
Парсер я сам сделаю. Мне бы гипертекст получить с сайта.
Ответы
Всего ответов: 39
Номер ответа: 1
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #1
Добавлено: 25.08.04 04:24
Попробуй
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const scUserAgent = "VB Project"
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Function OpenURL(ByVal sUrl As String) As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
Dim sBuffer As String
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
bDoLoop = True
While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Wend
If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
OpenURL = sBuffer
End Function
Кажется это в VBNet.ru и взято
Номер ответа: 2
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #2
Добавлено: 25.08.04 04:25
У меня это работает
Номер ответа: 3
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #3
Добавлено: 25.08.04 21:47
Спасибо, то что нужно.
Номер ответа: 4
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #4
Добавлено: 25.08.04 23:41
А как можно осуществить перекодировку из KOI8-R в Windows-1251?
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 26.08.04 00:00
Ты имеешь ввиду есть ли такая API? Не думаю. Прийдётся наверное самому писать или через поисковик. По любому найдёшь.
Номер ответа: 6
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #6
Добавлено: 26.08.04 00:29
Кажется нашел - вроде нужно использовать две функции
MultiByteToWideChar
WideCharToMultiByte
Номер ответа: 7
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #7
Добавлено: 26.08.04 00:53
Все!!! ))
Супер получилось!
Public Function Convert( _
ByVal sString As String, _
ByVal cpFrom As Long, _
ByVal cpTo As Long) As String
 im lLenght As Long, lRetval As Long
 im sDst As String, sRet As String
lLenght = Len(sString)
sDst = String(lLenght * 2, vbNullChar)
sRet = String(lLenght * 2, vbNullChar)
lRetval = MultiByteToWideChar( _
cpFrom, _
MB_PRECOMPOSED, _
sString, _
lLenght, _
sDst, _
lLenght _
 
lRetval = WideCharToMultiByte( _
cpTo, _
0&, _
sDst, _
lRetval, _
sRet, _
lLenght * 2, _
ByVal 0&, _
0 _
 
Convert = Left(sRet, lRetval)
End Function
Номер ответа: 8
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #8
Добавлено: 27.08.04 01:35
CyRax:
У меня в вышеуказанном коде InternetOpenUrl ужасно тормозит!
У тебя как?
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 27.08.04 21:15
То что ты показывал перекодирует из ANSI в UNICODE.
Да, тормозит. Я думал из за Dial-up'а. А ты думаешь почему?
Номер ответа: 10
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #10
Добавлено: 27.08.04 21:20
2Lister:
> А как можно осуществить перекодировку из KOI8-R в Windows-1251?
Скачай из раздела "ActiveX" контрол SimpleSMTP - там есть функция преобразования Win->KOI, несложно переделать её "наоборот".
Номер ответа: 11
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #11
Добавлено: 28.08.04 02:18
Я уже самостоятельно сотворил код - ОТЛИЧНО работает!
Но за совет спасибо!
Номер ответа: 12
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #12
Добавлено: 28.08.04 02:21
1) То, что я показывал, также перекодирует из KOI8-R в Windows-1251 - я сегодня
перекодировал около 9000 файлов...
И сейчас продолжаю этим заниматься.
2) у меня выделенка - тормозит однозначно! Диалап не при чем.
Тормозит именно использование этой функции. Почему - не знаю.
На открытие урла тратится секунд 5-10, не меньше.
Номер ответа: 13
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #13
Добавлено: 28.08.04 19:00
Ну я могу ещё на PB потестить. Если и там тормозить будет, тогда наверное прийдётся что другое искать. Можно контрол DaSharm'а поковырять. Может там что нибудь удастся найти.
Номер ответа: 14
Автор ответа:
Lister
ICQ: 298621256
Вопросов: 57
Ответов: 304
Профиль | | #14
Добавлено: 28.08.04 19:19
Но тормозит страшно, это факт... В компилированном виде не пробовал,
но в режиме отладки у меня иногда ВСЯ система подвисает секунд на 15.
А вообще у меня была такая задача:
нужно было загрузить из сети и преобразовать из KOI8-R в WIN-1251
около 9000 файлов. Заняло несколько часов. Параллельно на компе вообще
работать было нельзя
Номер ответа: 15
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #15
Добавлено: 28.08.04 20:24
Висит потому что цикл без DoEvents.
Сейчас попробую оптимизировать. Правда я это на PB делаю, так что для VB может и не проканать.