#include "WinINet.au3"
$sReg_pattern_add = '\s*=[\s"' & "']*([^<>\r\n'" & '"]+)' ;\s*=[\s"']*([^<>\r\n'"]+) Тут находим значение между ковычками (если есть)
Global Const $sReg_VIEWSTATE = "(?i)\Q__VIEWSTATE\E.*?\Qvalue\E" & $sReg_pattern_add
Global Const $User_Agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
Global $hInternetOpen, $hInternetConnect
Global $sFORMDATA = ""
_PostData()
Func _PostData()
Local $readfile = Binary("")
Local $textData, $aBalance, $iBalance, $pattern
Local $hOpenRequest, $SendRequest
$hInternetOpen = _WinINet_InternetOpen($User_Agent, $INTERNET_OPEN_TYPE_PRECONFIG)
$hInternetConnect = _WinINet_InternetConnect($hInternetOpen, $INTERNET_SERVICE_HTTP, 'zakupki.bashneft.ru', $INTERNET_DEFAULT_HTTP_PORT)
$hOpenRequest = _WinINet_HttpOpenRequest($hInternetConnect, "GET", "/Default.aspx")
$SendRequest = _WinINet_HttpSendRequest($hOpenRequest, 'Accept: text/html' & @CRLF, Default)
Do
$readfile &= _WinINet_InternetReadFile($hOpenRequest, 5000)
Until @error Or Not @extended
$textData = BinaryToString($readfile, 4) ;UTF8
$aVIEWSTATE = StringRegExp($textData, $sReg_VIEWSTATE, 1)
If @error Then Return SetError(2, 1)
$__VIEWSTATE = $aVIEWSTATE[0]
_WinINet_InternetCloseHandle($hOpenRequest)
$hOpenRequest = _WinINet_HttpOpenRequest($hInternetConnect, "POST", "/Default.aspx")
$__VIEWSTATE = _URLEncode($__VIEWSTATE)
_addFormData('ctl00$BodyHolder$ContentHolder$ctl11', '23.06.2012')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl12', '24.07.2012')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl15', '')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl16', '-1')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl17', '-1')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl18', '')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl21', '')
_addFormData('ctl00$BodyHolder$ContentHolder$ctl22', 'бесперебойного') ;Ключевые слова
_addFormData('ctl00$BodyHolder$ContentHolder$ctl26', 'найти')
_addFormData('__VIEWSTATE', $__VIEWSTATE)
$vOptional = StringToBinary($sFORMDATA)
$SendRequest = _WinINet_HttpSendRequest($hOpenRequest, 'Content-Type: application/x-www-form-urlencoded' & @CRLF, $vOptional)
$readfile = Binary("")
Do
$readfile &= _WinINet_InternetReadFile($hOpenRequest, 5000)
Until @error Or Not @extended
$sFORMDATA = ''
$textData = BinaryToString($readfile, 4) ;UTF8
;~ ConsoleWrite($textData & @LF)
_WriteToDfile("out.html",$textData)
EndFunc ;==>_PostData
Func _addFormData($sname, $value)
$value = _UnicodeToUrl($value)
If $sFORMDATA Then
$sFORMDATA &= "&" & $sname & "=" & $value
Else
$sFORMDATA &= $sname & "=" & $value
EndIf
EndFunc ;==>_addFormData
Func _UnicodeToUrl($sStr)
Local $sOut
For $i = 1 To StringLen($sStr)
$chr = StringMid($sStr, $i, 1)
Switch AscW($chr)
Case 1040 To 1103
$bin = StringToBinary($chr, 4)
$fByte = StringMid($bin, 3, 2)
$sByte = StringMid($bin, 5, 2)
$sOut &= "%" & $fByte & "%" & $sByte
Case Else
$sOut &= $chr
EndSwitch
Next
Return $sOut
EndFunc ;==>_UnicodeToUrl
Func _URLEncode($sToEncode)
$sToEncode = StringReplace($sToEncode, "!", "%21")
$sToEncode = StringReplace($sToEncode, "#", "%23")
$sToEncode = StringReplace($sToEncode, "$", "%24")
$sToEncode = StringReplace($sToEncode, "&", "%26")
$sToEncode = StringReplace($sToEncode, "'", "%27")
$sToEncode = StringReplace($sToEncode, "(", "%28")
$sToEncode = StringReplace($sToEncode, ")", "%29")
$sToEncode = StringReplace($sToEncode, "*", "%2A")
$sToEncode = StringReplace($sToEncode, "+", "%2B")
$sToEncode = StringReplace($sToEncode, ",", "%2C")
$sToEncode = StringReplace($sToEncode, "/", "%2F")
$sToEncode = StringReplace($sToEncode, ":", "%3A")
$sToEncode = StringReplace($sToEncode, ";", "%3B")
$sToEncode = StringReplace($sToEncode, "=", "%3D")
$sToEncode = StringReplace($sToEncode, "?", "%3F")
$sToEncode = StringReplace($sToEncode, "@", "%40")
$sToEncode = StringReplace($sToEncode, "[", "%5B")
$sToEncode = StringReplace($sToEncode, "]", "%5D")
Return $sToEncode
EndFunc ;==>_URLEncode
Func _WriteToDfile($sFileName, $sDataToWrite)
;~ Return 1 ; Ничего не писать. Убрать если нужен анализ.
Local $hFile = FileOpen($sFileName, 2 + 128)
FileWrite($hFile, $sDataToWrite)
FileClose($hFile)
EndFunc ;==>_WriteToDfile