Страницы: 1
RSS
как обнулить XMLHTTP от кешированных значений?
 
Как обнулить XMLHTTP от кешированных значений ?
Пробовал 5 разных способов, не помог ни один, всё равно приносит старое значение респонса с юкоза
Код
set obj = Nothing
max-age=0
no-cache, no-store, must-revalidate
"If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
?hash=rnd

Как вы обнуляете кеш? или просто не используете XMLHTTP ?

И заодно, через сколько минут кеш сбрасывается? через 30 минут?

Изменено: KUDRIN - 19.03.2020 11:23:25
 
Про какой кеш вообще речь?
5 способов ваших - вообще никак между собой не связаны
Лучше скажите, что делаете, и в чем проблема.
 
Цитата
Про какой кеш вообще речь? Лучше скажите, что делаете, и в чем проблема.
Речь идёт про непрогруз страницы. Если один раз запросить респонс, а потом сразу повторить через новый прогруз, то он не прогружает заново, а просто приносит старое значение. Если 10 разных страниц прогрузить, а потом сразу повторить, то он затратит на это одно мгновение, т.к не грузит заново, а просто из кеша приносит. Гуглить подобное по "XMLHTTP not refreshing"
(Хотя зависит от сайта тоже?, проверил на паре новых сайтов с онлайн временем и из конструктора - приносит обновленное значение, а вот старые сайты на старом хтмл, обычно один раз только грузит, потом ждать минут 30 или час).
Итого
1. Проблема это обновить респонс (загрузить заново) невозможно, приходится ждать или менять функцию.
2. Нельзя сменить печеньку, он съедает одну, а потом вместо неё даёшь другую, а он респонс приносит от первой печеньки.
Цитата
5 способов ваших - вообще никак между собой не связаны
Они и не должны быть связаны, 5 отдельных разных способов.
Изменено: KUDRIN - 19.03.2020 01:42:46
 
Используйте WinHTTPRequest вместо XMLHTTP, и проблем не будет
Пример кода: https://excelvba.ru/code/GetHTTPResponse
Код
Sub test_internet()
    On Error Resume Next
    URL$ = "http://ExcelVBA.ru/"
 
    Const TIMEOUT& = 6        ' в секундах
    Set whttp = CreateObject("WinHttp.WinHttpRequest.5.1")
 
    whttp.Open "GET", URL$, True: DoEvents
    whttp.Send: DoEvents
 
    If Not whttp.WaitForResponse(TIMEOUT&) Then
        MsgBox "timeout", URL: Exit Sub
    End If
 
    txt$ = whttp.responsetext
    MsgBox txt, vbInformation, "Длина ответа: " & Len(txt)
End Sub
 
Код
Public Enum IE_Cleaner_Flag
    CLEAR_HISTORY = &H1               'Clears history
    CLEAR_COOKIES = &H2               'Clears cookies
    Clear_Cache = &H4                 'Clears Temporary Internet Files folder
    CLEAR_CACHE_ALL = &H8             'Clears offline favorites and download history
    CLEAR_FORM_DATA = &H10            'Clears saved form data for form auto-fill-in
    CLEAR_PASSWORDS = &H20            'Clears passwords saved for websites
    CLEAR_PHISHING_FILTER = &H40      'Clears phishing filter data
    CLEAR_RECOVERY_DATA = &H80        'Clears webpage recovery data
    CLEAR_PRIVACY_ADVISOR = &H800     'Clears tracking data
    CLEAR_SHOW_NO_GUI = &H100         'Do not show a GUI when running the cache clearing
    CLEAR_USE_NO_THREAD = &H200       'Do not use multithreading for deletion
    CLEAR_PRIVATE_CACHE = &H400       'Valid only when browser is in private browsing mode
    CLEAR_DELETE_ALL = &H1000         'Deletes data stored by add-ons
    CLEAR_PRESERVE_FAVORITES = &H2000 'Preserves cached data for "favorite" websites
    CLEAR_CACHE_OPTIONS = &H9FF
End Enum
#If VBA7 Then
    Private Declare PtrSafe Function InternetSetOption _
        Lib "wininet.dll" _
        Alias "InternetSetOptionA" ( _
            ByVal hInternet As LongPtr, _
            ByVal lOption As Long, _
            ByRef lpBuffer As Any, _
            ByVal lBufferLength As Long _
        ) As Long
#Else
    Private Declare Function InternetSetOption _
        Lib "wininet.dll" _
        Alias "InternetSetOptionA" ( _
            ByVal hInternet As Long, _
            ByVal lOption As Long, _
            ByRef lpBuffer As Any, _
            ByVal lBufferLength As Long _
        ) As Long
#End If
Private Const INTERNET_OPTION_END_BROWSER_SESSION = &H2A

Public Sub ClearIE(Flag As IE_Cleaner_Flag)
    Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess " & Flag
End Sub

Sub test()
    ClearIE CLEAR_SHOW_NO_GUI Or CLEAR_HISTORY Or CLEAR_COOKIES Or CLEAR_CACHE_ALL
End Sub

Sub test2()
    Dim lRet&
    lRet = InternetSetOption(0, INTERNET_OPTION_END_BROWSER_SESSION, ByVal 0&, 0)
    If lRet Then Debug.Print "Success"
End Sub

еще тут можно посмотреть использование других флагов для InternetSetOption
Изменено: Андрей Лящук - 19.03.2020 03:00:56
 
Цитата
Используйте WinHTTPRequest
вопрос был конкретно про сброс в XMLHTTP

Андрей Лящук, test отлично сбросил печеньку
при этом показал GUI, хотя флаг не-гуишный стоит



test2 печеньку не сбросил, но отрапортовал про success,
Про кеш страниц - пока нет рабочего тестового url, на котором можно проверить сброс кеша при повторной загрузке (имеющиеся опытные образцы пока грузят не за 0,2 сек из кеша), как только подвернётся буду тестировать на нём
Изменено: KUDRIN - 19.03.2020 10:50:46
 
а так?
Код
#If VBA7 Then
    Private Declare PtrSafe Function InternetSetOption _
        Lib "wininet.dll" _
        Alias "InternetSetOptionA" ( _
            ByVal hInternet As LongPtr, _
            ByVal lOption As Long, _
            ByRef lpBuffer As Any, _
            ByVal lBufferLength As Long _
        ) As Long
#Else
    Private Declare Function InternetSetOption _
        Lib "wininet.dll" _
        Alias "InternetSetOptionA" ( _
            ByVal hInternet As Long, _
            ByVal lOption As Long, _
            ByRef lpBuffer As Any, _
            ByVal lBufferLength As Long _
        ) As Long
#End If
Private Enum INTERNET_OPTION 'some of the option flags which used with the InternetQueryOption and InternetSetOption functions.
    END_BROWSER_SESSION = &H2A          'Flushes entries not in use from the password cache on the hard disk drive.
                                            'Also resets the cache time used when the synchronization mode is once-per-session.
                                            'No buffer is required for this option. This is used by InternetSetOption.
    RESET_URLCACHE_SESSION = &H3C       'Starts a new cache session for the process. No buffer is required.
                                            'This is used by InternetSetOption. This option is reserved for internal use only.
    SUPPRESS_BEHAVIOR = &H51            'A general purpose option that is used to suppress behaviors on a process-wide basis.
                                            'The lpBuffer parameter of the function must be a pointer to a DWORD containing the specific
                                            'behavior to suppress. This option cannot be queried with InternetQueryOption
End Enum

Private Enum INTERNET_SUPPRESS 'list of permitted values for InternetSetOption's INTERNET_OPTION_SUPPRESS_BEHAVIOR(&H51) option
    RESET_ALL = 0                       'Disables all suppressions, re-enabling default and configured behavior.
                                            'This option is the equivalent of setting INTERNET_SUPPRESS_COOKIE_POLICY_RESET
                                            'and INTERNET_SUPPRESS_COOKIE_PERSIST_RESET individually.
                                            'Version: Requires Internet Explorer 6.0 or later.
    COOKIE_POLICY = 1                   'Ignores any configured cookie policies and allows cookies to be set.
                                            'Version: Requires Internet Explorer 6.0 or later.
    COOKIE_POLICY_RESET = 2             'Disables the INTERNET_SUPPRESS_COOKIE_POLICY suppression, permitting the evaluation
                                            'of cookies according to the configured cookie policy.
                                            'Version: Requires Internet Explorer 6.0 or later.
    COOKIE_PERSIST = 3                  'Suppresses the persistence of cookies, even if the server has specified them as persistent.
                                            'Version: Requires Internet Explorer 8.0 or later.
    COOKIE_PERSIST_RESET = 4            'Disables the INTERNET_SUPPRESS_COOKIE_PERSIST suppression, re-enabling the persistence
                                            'of cookies. Any previously suppressed cookies will not become persistent.
End Enum

Sub test2()
    Dim lRet&
    lRet = InternetSetOption(0, INTERNET_OPTION.END_BROWSER_SESSION, ByVal 0&, 0) And _
           InternetSetOption(0, INTERNET_OPTION.SUPPRESS_BEHAVIOR, INTERNET_SUPPRESS.COOKIE_PERSIST, 4) And _
           InternetSetOption(0, INTERNET_OPTION.RESET_URLCACHE_SESSION, ByVal 0&, 0)
    If lRet Then Debug.Print "Success"
End Sub

по поводу URLCACHE не уверен - из той ли оперы?...
 
Цитата
по поводу URLCACHE не уверен - из той ли оперы?...
сильно похоже, что InternetSetOption вообще из своей личной оперы со своими dll-отдельно объявляемыми функциями (PostMethod.cls class  in VB6)
InternetOpen
InternetOpenUrl
HttpSendRequest
HttpQueryInfo
InternetConnect
HttpOpenRequest
Изменено: KUDRIN - 23.03.2020 18:43:50
 
Актуально?
 
мне актуально
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Страницы: 1
Наверх