powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Приконнектиться к сайту и чего-нибудь считать
14 сообщений из 14, страница 1 из 1
Приконнектиться к сайту и чего-нибудь считать
    #36978221
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вопрос в чем, как я понимаю задачу...
На сервере лежит текстовой файл http://myserver.com/somefile.txt
В нем содержится какая-то информация:
скажем список заблокированных ключей (компьютеров)
какие-то другие инструкции типа:
PC-ID 12345 : instruction1=aaa;instruction2=bbb;
PC-ID 67890 : instruction1=ФФФ;instruction2=ТТТ;
идея ясна, прога туда смотрит(скажем, при запуске) и на основании считанного чего-то делает:например говорит что лицензия недействительна, или открывает страничку насчет проапгрейдиться и т.п.

Требования какие:
1) чтоб если скажем нет интернета, более точно "если информация не получена" ничего не делала и ошибок не выдавала
2) чтоб это не выглядело слишком похабно и антивирусы не наглели ну и т.п.

Один метод я знаю, использовал для закачки информации в служебной проге:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Declare Function URLDownloadToFile Lib "urlmon" _
                    Alias "URLDownloadToFileA" ( _
                    ByVal pCaller As Long, _
                    ByVal szURL As String, _
                    ByVal szFileName As String, _
                    ByVal dwReserved As Long, _
                    ByVal lpfnCB As Long) _
                    As Long

Public Function DownLoadFile(URL As String, LocalFilename As String) As Boolean
    Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile( 0 , URL, LocalFilename,  0 ,  0 )
    If lngRetVal =  0  Then DownLoadFile = True
End Function

DownLoadFile "http://myserver.com/somefile.txt" , "c:/tmp/somefile.txt"
Ну, как сказать... после какого-то обновления он напр.вдруг сломался,потом опять заработал. да и сохранять в данном случае считаю ненужным и даже вредным. Надо только найти строчку и "взглянуть" на нее.

Единственно, чтоб это было API, а не какая-нибудь vb-самопалка типа объект WebBrowser с анализом html-кода.
Есть идеи? Как лучше реализовать этот механизм?
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36978342
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36978518
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro 9837410
Ну и? ХМXML изучать? У меня маленькая текстовуха латинскими буквами типа конфига.
Мож мне еще БД туда запихнуть какую-нибудь похитрее и понавороченнее?
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36978733
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути что-то типа
Microsoft Internet Transfer Control 6.0 (SP6)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub cmdGet_Click()
    Inet1.Execute "http://www.mysite.com/folder/somefile.txt", "GET"
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim var_data As Variant
Dim str_data As String

    If State = icResponseCompleted Then
        ' Get the first chunk.
        var_data = Inet1.GetChunk( 1024 , icString)
        str_data = str_data & var_data

        ' Get the rest of the chunks.
        Do
            DoEvents
            var_data = Inet1.GetChunk( 1024 , icString)
            If Len(var_data) =  0  Then Exit Do
            str_data = str_data & var_data
        Loop

        txtResults.Text = str_data
    End If
End Sub
Но низкий критерий доверия ко всем этим контролам, надо думаю то же через API, понять бы что за сим стоит, пока не докопал.
И насколько мои требования 1-2 удовлетворяются?...
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36978760
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Куда-то сюда видимо

Wininet.dll
WinINet Functions

InternetOpen
InternetOpenUrl
InternetReadFile

InternetOpen
InternetConnect
HttpOpenRequest
InternetReadFile

Ну конечно примеры бы не повредили.
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36978799
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так нормально?
http://www.bahamasissues.com/archive/index.php/t-3953.html
Особо не вдумывался пока. Вроде оно делает чего хочу.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
Private Const STRING_SIZE =  128 
Private Const INTERNET_OPEN_TYPE_DIRECT =  1 
Private Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
'
Private Declare Function InternetOpen Lib "wininet" 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 InternetCloseHandle Lib "wininet" (ByRef hInet As Long) As Long
'
Private Declare Function InternetReadFile Lib "wininet" _
  (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
'
Private Declare Function InternetOpenUrl Lib "wininet" Alias "InternetOpenUrlA" _
  (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, _
  ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
'
Public Function SendAPIRequest(ByVal strUrl As String) As String
    Dim hOpen As Long, hFile As Long
    Dim Ret As Long, sBuffer As String *  128 
    Dim iResult As Integer, sData As String
    hOpen = InternetOpen("VB Program",  1 , vbNullString, vbNullString,  0 )
    If hOpen =  0  Then
        MsgBox "Error opening Internet connection"
        Exit Function
    End If
    hFile = InternetOpenUrl(hOpen, strUrl, vbNullString,  0 , INTERNET_FLAG_NO_CACHE_WRITE,  0 )
    If hFile =  0  Then
        MsgBox "Error opening Web page"
    Else
        InternetReadFile hFile, sBuffer, STRING_SIZE, Ret
        sData = sBuffer
        Do While Ret <>  0 
            InternetReadFile hFile, sBuffer, STRING_SIZE, Ret
            sData = sData + Mid(sBuffer,  1 , Ret)
        Loop
    End If
    InternetCloseHandle hFile
    InternetCloseHandle hOpen
    SendAPIRequest = sData
    sData = ""
End Function
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36978838
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но странно... при повторном запуске этого кода(нажатии кнопки) с тем же URL, но без перезапуска проги, повторного обращения к серверу не происходит. В Wireshark нарочно смотрел. Мож чего не хватает?
Хотя...я ж не каждую секунду туда лазю, а только при запуске проги... плевать наверно.
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36979174
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Дмитрий77
> Но странно... при повторном запуске этого кода(нажатии кнопки) с тем же URL, но без

Наверное из кеша берёт, чьего-то :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36979223
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
хуже другое:
запускаю этот код на тестовой висте:
Авира тут же вякает: TR/VB.Downloader.Gen
Пакую протектором, не затыкается: TR/Crypt.ASPM.Gen
Эти антивирусы совсем е..нулись.
Есть шанс, что в составе большого защищенного файла этот код не будет так восприниматься.
Авира хотя бы вменяемая, они исправляют если им пишешь...
Но все равно наф. это нужно...когда это через месяц кем-то обнаруживается, и хорошо если скажет.
Че делать то? Я прогу пишу или с антивирусами воюю в конце концов...?
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #36979329
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В составе большого exe-шника ни в открытом ни в защищенном виде вроде ничего не детектится, но конечно все это вилами по воде.
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #37012056
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Натолкнулся таки на багу с примером приведенным выше:
Код: plaintext
Public Function SendAPIRequest(ByVal strUrl As String) As String
Смысл в чем: интернет "типа" есть, но какие-то проблемы, напр. одновременно включаем две сетевые карты, или отключаем интернет в роутере (не суть в этом разбираться, мне надо либо быстро прочитать файл, либо быстро вернуть ошибку при невозможности это быстро сделать), т.е. ситуация, в кот. IE будет долго чего-то ждать безрезультатно.
Вот это место кода подлит:
Код: plaintext
1.
2.
3.
   hFile = InternetOpenUrl(hOpen, strUrl, vbNullString,  0 , INTERNET_FLAG_NO_CACHE_WRITE,  0 )
    If hFile =  0  Then
        MsgBox "Error opening Web page"
    Else
Т.е. msgbox с error (выход из функции) мы получим конечно, но секунд 10 функция будет висеть.
Причем я запускаю функцию SendAPIRequest не в "основном потоке", а таймером (срабатывает единожды), но это здесь не спасает. Висеть эти 10 сек будет вся прога: кнопки не нажимаются, если упорствовать то "не отвечает", потом правда "отвисает".

Но у меня нет цели обязательно скачать файл, если ошибка, значит "не судьба", но 10сек висеть с часиками это не дело.
Пытался гуглить проблему, самое ценное что нарыл:
Using WinInet APIs Asynchronously Within Visual Basic
Надеюсь что это именно указатель на решение описанной проблемы.
Но там не код в чистом виде, а рекомендации чего делать.
Причем как понял из другого нагугленного люди спотыкаются при попытках реализовать этот асинхронный вызов с CallBack.
Как вызывать CallBack там описано;
Пример самого CallBack там дан.
Как декларировать InternetReadFile там тоже написано.

Но непонятно с ходу откуда, когда и как вызывать этот InternetReadFile.
Чего писать в CallBack?
Как оттуда выходить? Произойдет ли выход сразу или даст возможность программе спокойно работать эти 10 сек? А точно ли она выйдет?
Шаги 4-6 вообще непонятно и ни копейки кода.
Т.е. дело ясное что дело темное...

М.б. есть где какой пример конкретный и рабочий?
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #37017410
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может наплевать на эти API-асинхронности и на Microsoft Internet Transfer Control 6.0 (SP6) и использовать вот это:

How To Use the AsyncRead Method to Download Files

Готовый хороший пример на эту тему как бы есть:
http://vb.mvps.org/samples/NetGrab/

Приложение эта штука не завешивает, на ошибку "ожидания" реагирует достаточно быстро.
Антивирусы на нее вроде не ругаются, ко всем остальным методам они как-то частенько неравнодушны.
Для загрузки большого файла тоже вроде удобно использовать...
Единственное не очень нравится что загружает в TMP-файл, не помешало б уметь в переменную загружать.
Правильно ли я понимаю, что строится UserControl и за собой ничего (как в случае ocx) таскать не надо и будет гарантированно работать?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Приконнектиться к сайту и чего-нибудь считать
    #38501693
Клевер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, мне нужно абсолютно то же самое с теми же целями. Вопрос тут, как я понял, сводится с тому, какие библиотеки использовать
MSXML2.XMLHTTP - msxml3.dll
NetGrab - kernel32
Inet1 - msinet.ocx
webbrowser - shdocvw.dll

мне нужен наиболее простой в использовании, наиболее стабильный, при этом не требующий таскать с собой сторонние dll.
MSXML2.XMLHTTP сложен в использовании. сейчас более-менее стабилен, но код занимает сотни строк и несколько десятков таймеров. Inet1 и webbrowser требуют установку библиотек, однозначно не подходят. NetGrab повёл себя хорошо, но код уж очень замуторный
можешь скинуть свой код на основе NetGrab? без всего лишнего
...
Рейтинг: 0 / 0
Приконнектиться к сайту и чего-нибудь считать
    #38501705
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клевер можешь скинуть свой код на основе NetGrab? без всего лишнего
В указанном примере нет ничего лишнего.
Если ты хочешь упрощать и выкидывать, то ты должен все это штудировать, читать описания API и т.п. и понимать каждую строчку.

Но как я уже писал 3 года назад, я использую Inet1.
Это тот случай когда OCX надо таскать с собой, и да, регистрировать в %SystemDir%.

Если тебе пофиг что программа висит пока качается файл, либо тупит из-за отсутствия интернета (потому что в VB6 один поток), то можешь использовать API из "wininet". Но имей еще в виду, что антивирусы хронически не переваривают данную dll.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Приконнектиться к сайту и чего-нибудь считать
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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