Что нового

[Сеть, интернет] Запретить скрипту автоматическую передачу cookie при использовании WinHTTP

Crazy Kvace

Знающий
Сообщения
30
Репутация
8
Доброе время суток!
Есть скрипт отправляющий GET запросы серверу.

Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")

$oHTTP.Open("GET", "http://192.168.30.12/") ;1 запрос
$oHTTP.SetRequestHeader("Accept", "*/*")
$oHTTP.SetRequestHeader("Accept-Language", "ru-RU")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)")
$oHTTP.SetRequestHeader("Host", "192.168.30.12")
$oHTTP.SetRequestHeader("Connection", "Keep-Alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse
$HTML=$oHTTP.ResponseText
$sHTML = BinaryToString($HTML)
$string = StringRegExpReplace($sHTML, ".*(Mt([0-9a-zA-Z]+)).*", "$1")

$oHTTP.Open("GET", "http://192.168.30.12/?s=" & $string) ;2 запрос
$oHTTP.SetRequestHeader("Accept", "*/*")
$oHTTP.SetRequestHeader("Referer", "http://192.168.30.12/")
$oHTTP.SetRequestHeader("Accept-Language", "ru-RU")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)")
$oHTTP.SetRequestHeader("Host", "192.168.30.12")
$oHTTP.SetRequestHeader("Connection", "Keep-Alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse
$HTML=$oHTTP.ResponseText
$sHTML = BinaryToString($HTML)

MsgBox (0, "html: ", $sHTML)


При проверке работы скрипта HTTP Analyzer'ом, я заметил что при отправке второго запроса, скрипт прикрепляет еще и cookie которые сервер возвращает при первом запросе, хотя мне это не нужно, и у меня в коде это не упоминается.

Второй запрос глазами HTTP Analyzer...
Код:
GET /?s=MtNzctMS0zLTUzNjkzLTgtMC0xLTEzND0MDkwNTc4MC4yNzg2MjMxOTAyMD HTTP/1.1
Accept: */*
Referer: http://192.168.30.12/
Accept-Language: ru-RU
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 192.168.30.12
Connection: Keep-Alive
Cookie: _pgz=40901947e69c4cb7eeba08.28

Как мне запретить передачу cookie скриптом Autoit без необходимости? может какой-то параметр существует?
Заранее спасибо.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
По идее есть такой флаг WINHTTP_OPTION_DISABLE_FEATURE, а в нем:
Код:
WINHTTP_DISABLE_COOKIES

    Automatic addition of cookie headers to requests is disabled. Also, returned cookies are not automatically added to the cookie database. Disabling cookies can result in poor performance for Passport authentication.
link
У меня не получилось найти соответствующий option для WinHttp.
Их вообще сложно найти в виде констант, который понимает AutoIt:
Код:
$oHttp.option(6) = False ; отключение авторедиректа


Пока вижу только два способа решения задачи:
1. Принудительно выставить пустую куку самому (но не факт что поможет):
Код:
$oHTTP.SetRequestHeader('Cookie', '')

2. Удалять объект WinHttp перед запросом вызовом и создавать заново:
Код:
;................
$string = StringRegExpReplace($sHTML, ".*(Mt([0-9a-zA-Z]+)).*", "$1")

$oHTTP = 0
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "http://192.168.30.12/?s=" & $string) ;2 запрос
;.....................


PS: прилеплю здесь список найденных мною опций, чтобы не искать в следующий раз:
Код:
Const WinHttpRequestOption_UserAgentString = 0
Const WinHttpRequestOption_URL = 1
Const WinHttpRequestOption_URLCodePage = 2
Const WinHttpRequestOption_EscapePercentInURL = 3
Const WinHttpRequestOption_SslErrorIgnoreFlags = 4
Const WinHttpRequestOption_SelectCertificate = 5
Const WinHttpRequestOption_EnableRedirects = 6
Const WinHttpRequestOption_UrlEscapeDisable = 7
Const WinHttpRequestOption_UrlEscapeDisableQuery = 8
Const WinHttpRequestOption_SecureProtocols = 9
Const WinHttpRequestOption_EnableTracing = 10
option(11)=false; // RevertImpersonationOverSsl
option(18)=false; // EnableCertificateRevocationCheck
 
Верх