ClearMyTracksByProcess без диалога | WinHttp.WinHttpRequest.5.1 | MSXML2.XMLHTTP

У меня есть VBS, который запускает CreateObject("MSXML2.XMLHTTP").Open "GET", однако мне нужно удалить кеш IE11 перед его запуском, потому что get продолжает извлекать кешированную версию веб-сайта, срок действия которой не истекает в течение 1 минуты после первоначального получения. Если я использую RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8, отображается диалоговое окно, которое отвлекает и привлекает внимание.

myURL = "https://localhost/"

Set ohtmlFile = CreateObject("htmlfile")

Set oXMLHttp = CreateObject("MSXML2.XMLHTTP")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Cache-Control", "no-cache"
oXMLHttp.send

If oXMLHttp.Status = 200 Then

    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

Не изменяет файловый кеш, все еще истекает через одну минуту после первоначального извлечения.

+++++++++++++++++++++++++++++++++++++++

myURL = "https://localhost/"

Set ohtmlFile = CreateObject("htmlfile")

Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Cache-Control", "no-cache"
oXMLHttp.send

If oXMLHttp.Status = 200 Then

    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

oXMLHttp.responseText ничего не возвращает

++++++++++++++++++++++++++++++++++++++

CreateObject("WScript.Shell").Run "scripts\exe\PsExec64.exe -accepteula -nobanner -realtime -d RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8", 0, True

CreateObject("WScript.Shell").Run "scripts\exe\PsExec64.exe -accepteula -nobanner -realtime -d RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 264", 0, True

Оба по-прежнему случайным образом показывают всплывающее диалоговое окно.


person Cody Matthew    schedule 06.10.2019    source источник
comment
Вы пробовали задать такой запрос? .setRequestHeader cache-control, no-cache Если нет, вы можете провести тест на своей стороне, чтобы проверить, помогает ли он решить проблему или нет.   -  person Deepak-MSFT    schedule 07.10.2019
comment
Я попробовал, те же результаты, срок действия по-прежнему установлен на одной минуте от первоначального усилия.   -  person Cody Matthew    schedule 07.10.2019
comment
Можете ли вы предоставить образец веб-страницы, с помощью которой мы можем протестировать этот код, чтобы проверить наличие проблемы? потому что мы не можем создать проблему только с приведенным выше кодом. Это может помочь сузить круг вопросов.   -  person Deepak-MSFT    schedule 08.10.2019


Ответы (1)


Чтобы избежать получения кешированного ответа, вы можете вместо этого использовать объект ServerXmlHttpRequest и установить заголовок Cache-Control:

Set oXMLHttp = CreateObject("Msxml2.ServerXMLHTTP")

With oXMLHttp
    .open "GET", myURL, False
    .setRequestHeader "Cache-Control", "max-age=0"
    .send
End With

Он также должен работать с объектом WinHTTPRequest:

Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

По моему опыту, с WinHttpRequest вам даже не нужно устанавливать заголовок Cache-Control, поэтому вы можете все настроить, просто изменив MSXML2.XMLHTTP на WinHttp.WinHttpRequest.5.1 в вашем коде. Не помешает добавить заголовок.

Это должно решить вашу первоначальную проблему, связанную с получением кэшированной версии.

person Étienne Laneville    schedule 06.10.2019
comment
Когда я подаю Msxml2.ServerXMLHTTP или WinHttp.WinHttpRequest.5.1, я не получаю никаких данных из открытого доступа. Кроме того, когда я использую oXMLHttp.setRequestHeader "Cache-Control", "max-age=0", срок действия кеша сохраняется как одна минута после первоначального запроса. - person Cody Matthew; 07.10.2019
comment
Вы получите данные по звонку .send. Обычно вы хотите предоставить строку запроса, но она не отображается в вашем вопросе. Вы можете использовать .responseText, чтобы получить ответ от сервера. Что касается заголовка "Cache-Control", "max-age=0", из того, что я прочитал, он не подтверждается, если вы используете MSXML2.XMLHTTP. Мой совет - использовать WinHttp.WinHttpRequest.5.1, для которого не нужен заголовок. Измените свой вопрос, чтобы показать, что вы уже пробовали. Вы должны иметь возможность получить некэшированный ответ без особых проблем. - person Étienne Laneville; 07.10.2019
comment
Вопрос обновлен. Блок, окруженный ++++++, не возвращает никакого responseText - person Cody Matthew; 07.10.2019
comment
Я проверил код, и он работает, подозреваю, что myURL ничего не возвращает. Попробуйте установить myURL = "https://postman-echo.com/get?foo1=bar1&foo2=bar2", чтобы исключить ваш URL. - person Étienne Laneville; 07.10.2019
comment
Похоже, это проблема с файлами cookie ... Когда я запускаю URL-адрес почтальона, он работает, когда я запускаю свой URL-адрес (который использует cookie для входа), я перенаправляюсь на страницу входа. WinHttp.WinHttpRequest.5.1 не работает с сохраненными файлами cookie? - person Cody Matthew; 08.10.2019
comment
Думаю, я нашел это setResponseHeader("Set-Cookie") - person Cody Matthew; 08.10.2019
comment
Итак, я предполагаю, поскольку файл cookie установлен в IE 11, я не могу использовать его для входа в сеанс, создаваемый с помощью WinHttp.WinHttpRequest.5.1? - person Cody Matthew; 08.10.2019
comment
Вы работаете с запросом, а не с ответом. Я думаю, что вы обнаружили, что Сервер отправляет файлы cookie в ваш веб-браузер. Если вам нужны учетные данные для вашего API, вы можете установить для них заголовки запроса, вам нужно проверить, что ожидает API. Пожалуйста, добавьте информацию о своем API в свой вопрос или, возможно, опубликуйте новый вопрос. Думаю, вопрос с получением кешированных данных решен. - person Étienne Laneville; 08.10.2019
comment
Рад, что смог помочь. Я думаю, что передачу учетных данных должно быть легко вычислить, существует множество примеров. Имейте в виду, что ваш объект HTTP-запроса не зависит от настроек вашего IE. Удачи и возвращайтесь в Stack Overflow, чтобы задать вопросы по программированию! - person Étienne Laneville; 08.10.2019
comment
@ ÉtienneLaneville Есть кто-то, кто всегда хочет проголосовать против любого ответа в разделе vbscript, даже если позже это может быть принято, как и ваш случай, и я знаю его, я буду поддерживать вас +1 - person Hackoo; 09.10.2019
comment
@Hackoo спасибо !! Интересно об этих отрицательных голосах! Я ценю, что вы замечаете все это и помогаете людям, получившим отрицательные голоса. - person Étienne Laneville; 09.10.2019