#include-once #include "WinHTTPConstants.au3" DllOpen("winhttp.dll") ; Prog@ndy ;~ fields is a sequence of (name, value) elements for regular form fields. ;~ files is a sequence of (name, filename, value) elements for data to be uploaded as files ;~ Return (content_type, body) ready for httplib.HTTP instance Func Encode_MultiPart_FormData($fields, $files) Local Const $BOUNDARY = '--ThIs_Is_tHe_bouNdaRY_$--' ;~ CRLF = '\r\n' Local $L = "" For $i = 0 To UBound($fields) - 1 $L &= ('--' & $BOUNDARY) & @CRLF $L &= ('Content-Disposition: form-data; name="' & $fields[$i][0] & '"') & @CRLF $L &= @CRLF $L &= $fields[$i][1] & @CRLF Next For $i = 0 To UBound($files) - 1 $L &= ('--' & $BOUNDARY) & @CRLF $L &= ('Content-Disposition: form-data; name="' & $files[$i][0] & '"; filename="' & $files[$i][1] & '"') & @CRLF $L &= ('Content-Type: application/octet-stream') & @CRLF $L &= @CRLF $L &= FileRead($files[$i][1]) & @CRLF Next $L &= ('--' & $BOUNDARY & '--') & @CRLF $L &= @CRLF Local $content_type = 'multipart/form-data; boundary="' & $BOUNDARY & '"' Local $Return[2] = [$content_type, $L] ;~ return content_type, body Return $Return EndFunc ;==>Encode_MultiPart_FormData ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpAddRequestHeaders ; Description ...: Adds one or more HTTP request headers to the HTTP request handle. ; Syntax.........: _WinHttpAddRequestHeaders ($hRequest, $sHeaders [, $iModifiers]) ; Parameters ....: $hRequest - Handle returned by _WinHttpOpenRequest function. ; $sHeader - String that contains the header(s) to append to the request. ; $iModifier - Contains the flags used to modify the semantics of this function. Default is $WINHTTP_ADDREQ_FLAG_ADD_IF_NEW. ; Return values .: Success - Returns 1 and Sets ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: In case of multiple additions at once, must use @CRLF to separate each $hRequest and responded $sHeaders and $iModifiers. ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384087(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpAddRequestHeaders($hRequest, $sHeader, $iModifier = $WINHTTP_ADDREQ_FLAG_ADD_IF_NEW) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpAddRequestHeaders", _ "hwnd", $hRequest, _ "wstr", $sHeader, _ "dword", -1, _ "dword", $iModifier) If @error Or Not $a_iCall[0] Then SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpAddRequestHeaders ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpBinaryConcat ; Description ...: Concatenates two binary data returned by _WinHttpReadData() in binary mode. ; Syntax.........: _WinHttpBinaryConcat(ByRef $bBinary1, ByRef $bBinary2) ; Parameters ....: $bBinary1 - Binary data that is to be concatenated. ; $bBinary2 - Binary data to concat. ; Return values .: Success - Returns concatenated binary data. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - Invalid input. ; Author ........: ProgAndy ; Modified.......: trancexx ; Remarks .......: ; Related .......: ; Link ..........; ; Example .......; Yes ; ;========================================================================================== Func _WinHttpBinaryConcat(ByRef $bBinary1, ByRef $bBinary2) Switch IsBinary($bBinary1) + 2 * IsBinary($bBinary2) Case 0 Return SetError(1, 0, 0) Case 1 Return SetError(0, 0, $bBinary1) Case 2 Return SetError(0, 0, $bBinary2) EndSwitch Local $struct = DllStructCreate("byte[" & BinaryLen($bBinary1) & "];byte[" & BinaryLen($bBinary2) & "]") DllStructSetData($struct, 1, $bBinary1) DllStructSetData($struct, 2, $bBinary2) Local $structure_Output = DllStructCreate("byte[" & DllStructGetSize($struct) & "]", DllStructGetPtr($struct)) Return SetError(0, 0, DllStructGetData($structure_Output, 1)) EndFunc ;==>_WinHttpBinaryConcat ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpCheckPlatform ; Description ...: Determines whether the current platform is supported by this version of Microsoft Windows HTTP Services (WinHTTP). ; Syntax.........: _WinHttpCheckPlatform() ; Parameters ....: None ; Return values .: Success - Returns 1 if current platform is supported ; - Returns 0 if current platform is not supported ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384089(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpCheckPlatform() Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpCheckPlatform") If @error Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, $a_iCall[0]) EndFunc ;==>_WinHttpCheckPlatform ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpCloseHandle ; Description ...: Closes a single handle. ; Syntax.........: _WinHttpCloseHandle($hInternet) ; Parameters ....: $hInternet - Valid handle to be closed. ; Return values .: Success - Returns 1 ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384090(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpCloseHandle($hInternet) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpCloseHandle", "hwnd", $hInternet) If @error Or Not $a_iCall[0] Then SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpCloseHandle ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpConnect ; Description ...: Specifies the initial target server of an HTTP request and returns connection handle to an HTTP session for that initial target. ; Syntax.........: _WinHttpConnect($hSession, $sServerName [, $nServerPort]) ; Parameters ....: $hSession - Valid WinHTTP session handle returned by a previous call to WinHttpOpen. ; $sServerName - String that contains the host name of an HTTP server. ; $nServerPort - Integer that specifies the TCP/IP port on the server to which a connection is made (default is $INTERNET_DEFAULT_PORT) ; Return values .: Success - Returns a valid connection handle to the HTTP session ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: $nServerPort can be defined via global constants $INTERNET_DEFAULT_PORT, $INTERNET_DEFAULT_HTTP_PORT or $INTERNET_DEFAULT_HTTPS_PORT ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384091(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpConnect($hSession, $sServerName, $iServerPort = $INTERNET_DEFAULT_PORT) Local $a_hCall = DllCall("winhttp.dll", "hwnd", "WinHttpConnect", _ "hwnd", $hSession, _ "wstr", $sServerName, _ "int", $iServerPort, _ "dword", 0) If @error Or Not $a_hCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, $a_hCall[0]) EndFunc ;==>_WinHttpConnect ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpCrackUrl ; Description ...: Separates a URL into its component parts such as host name and path. ; Syntax.........: _WinHttpCrackUrl($sURL [, $iFlag]) ; Parameters ....: $sURL - String that contains the canonical URL to separate. ; $dwFlag - Flag that control the operation. Default is $ICU_ESCAPE ; Return values .: Success - Returns array which first element [0] is scheme name, ; second element [1] is internet protocol scheme., ; third element [2] is host name, ; fourth element [3] is port number, ; fifth element [4] is user name, ; sixth element [5] is password, ; seventh element [6] is URL path, ; eighth element [7] is extra information. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: ProgAndy ; Modified.......: trancexx ; Remarks .......: $dwFlag is defined in WinHTTPConstants.au3 and can be: ; | $ICU_DECODE - Converts characters that are "escape encoded" (%xx) to their non-escaped form. ; | $ICU_ESCAPE - Escapes certain characters to their escape sequences (%xx). ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384092(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpCrackUrl($sURL, $iFlag = $ICU_ESCAPE) Local $URL_COMPONENTS = DllStructCreate("dword dwStructSize;" & _ "ptr lpszScheme;" & _ "dword dwSchemeLength;" & _ "int nScheme;" & _ "ptr lpszHostName;" & _ "dword dwHostNameLength;" & _ "ushort nPort;" & _ "ptr lpszUserName;" & _ "dword dwUserNameLength;" & _ "ptr lpszPassword;" & _ "dword dwPasswordLength;" & _ "ptr lpszUrlPath;" & _ "dword dwUrlPathLength;" & _ "ptr lpszExtraInfo;" & _ "dword dwExtraInfoLength;") DllStructSetData($URL_COMPONENTS, 1, DllStructGetSize($URL_COMPONENTS)) Local $Buffers[6] Local $iURLLen = StringLen($sURL) For $i = 0 To 5 $Buffers[$i] = DllStructCreate("wchar[" & $iURLLen + 1 & "]") Next DllStructSetData($URL_COMPONENTS, "dwSchemeLength", $iURLLen) DllStructSetData($URL_COMPONENTS, "lpszScheme", DllStructGetPtr($Buffers[0])) DllStructSetData($URL_COMPONENTS, "dwHostNameLength", $iURLLen) DllStructSetData($URL_COMPONENTS, "lpszHostName", DllStructGetPtr($Buffers[1])) DllStructSetData($URL_COMPONENTS, "dwUserNameLength", $iURLLen) DllStructSetData($URL_COMPONENTS, "lpszUserName", DllStructGetPtr($Buffers[2])) DllStructSetData($URL_COMPONENTS, "dwPasswordLength", $iURLLen) DllStructSetData($URL_COMPONENTS, "lpszPassword", DllStructGetPtr($Buffers[3])) DllStructSetData($URL_COMPONENTS, "dwUrlPathLength", $iURLLen) DllStructSetData($URL_COMPONENTS, "lpszUrlPath", DllStructGetPtr($Buffers[4])) DllStructSetData($URL_COMPONENTS, "dwExtraInfoLength", $iURLLen) DllStructSetData($URL_COMPONENTS, "lpszExtraInfo", DllStructGetPtr($Buffers[5])) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpCrackUrl", _ "wstr", $sURL, _ "dword", $iURLLen, _ "dword", $iFlag, _ "ptr", DllStructGetPtr($URL_COMPONENTS)) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Local $a_Ret[8] = [DllStructGetData($Buffers[0], 1), _ DllStructGetData($URL_COMPONENTS, "nScheme"), _ DllStructGetData($Buffers[1], 1), _ DllStructGetData($URL_COMPONENTS, "nPort"), _ DllStructGetData($Buffers[2], 1), _ DllStructGetData($Buffers[3], 1), _ DllStructGetData($Buffers[4], 1), _ DllStructGetData($Buffers[5], 1)] Return SetError(0, 0, $a_Ret) EndFunc ;==>_WinHttpCrackUrl ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpCreateUrl ; Description ...: Creates a URL from array of components such as the host name and path. ; Syntax.........: _WinHttpCreateUrl($aURLArray) ; Parameters ....: $sURL - String that contains the canonical URL to separate. ; Return values .: Success - Returns created URL ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - Invalid input. ; |2 - Initial DllCall failed. ; |3 - Main DllCall failed ; Author ........: ProgAndy ; Modified.......: trancexx ; Remarks .......: Input is one dimensional 8 elements in size array: ; first element [0] is scheme name, ; second element [1] is internet protocol scheme., ; third element [2] is host name, ; fourth element [3] is port number, ; fifth element [4] is user name, ; sixth element [5] is password, ; seventh element [6] is URL path, ; eighth element [7] is extra information. ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384093(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpCreateUrl($aURLArray) If UBound($aURLArray) - 8 Then Return SetError(1, 0, "") EndIf Local $URL_COMPONENTS = DllStructCreate("dword dwStructSize;" & _ "ptr lpszScheme;" & _ "dword dwSchemeLength;" & _ "int nScheme;" & _ "ptr lpszHostName;" & _ "dword dwHostNameLength;" & _ "ushort nPort;" & _ "ptr lpszUserName;" & _ "dword dwUserNameLength;" & _ "ptr lpszPassword;" & _ "dword dwPasswordLength;" & _ "ptr lpszUrlPath;" & _ "dword dwUrlPathLength;" & _ "ptr lpszExtraInfo;" & _ "dword dwExtraInfoLength;") DllStructSetData($URL_COMPONENTS, 1, DllStructGetSize($URL_COMPONENTS)) Local $Buffers[6][2] $Buffers[0][1] = StringLen($aURLArray[0]) If $Buffers[0][1] Then $Buffers[0][0] = DllStructCreate("wchar[" & $Buffers[0][1] + 1 & "]") DllStructSetData($Buffers[0][0], 1, $aURLArray[0]) EndIf $Buffers[1][1] = StringLen($aURLArray[2]) If $Buffers[1][1] Then $Buffers[1][0] = DllStructCreate("wchar[" & $Buffers[1][1] + 1 & "]") DllStructSetData($Buffers[1][0], 1, $aURLArray[2]) EndIf $Buffers[2][1] = StringLen($aURLArray[4]) If $Buffers[2][1] Then $Buffers[2][0] = DllStructCreate("wchar[" & $Buffers[2][1] + 1 & "]") DllStructSetData($Buffers[2][0], 1, $aURLArray[4]) EndIf $Buffers[3][1] = StringLen($aURLArray[5]) If $Buffers[3][1] Then $Buffers[3][0] = DllStructCreate("wchar[" & $Buffers[3][1] + 1 & "]") DllStructSetData($Buffers[3][0], 1, $aURLArray[5]) EndIf $Buffers[4][1] = StringLen($aURLArray[6]) If $Buffers[4][1] Then $Buffers[4][0] = DllStructCreate("wchar[" & $Buffers[4][1] + 1 & "]") DllStructSetData($Buffers[4][0], 1, $aURLArray[6]) EndIf $Buffers[5][1] = StringLen($aURLArray[7]) If $Buffers[5][1] Then $Buffers[5][0] = DllStructCreate("wchar[" & $Buffers[5][1] + 1 & "]") DllStructSetData($Buffers[5][0], 1, $aURLArray[7]) EndIf DllStructSetData($URL_COMPONENTS, "dwSchemeLength", $Buffers[0][1]) DllStructSetData($URL_COMPONENTS, "lpszScheme", DllStructGetPtr($Buffers[0][0])) DllStructSetData($URL_COMPONENTS, "dwHostNameLength", $Buffers[1][1]) DllStructSetData($URL_COMPONENTS, "lpszHostName", DllStructGetPtr($Buffers[1][0])) DllStructSetData($URL_COMPONENTS, "dwUserNameLength", $Buffers[2][1]) DllStructSetData($URL_COMPONENTS, "lpszUserName", DllStructGetPtr($Buffers[2][0])) DllStructSetData($URL_COMPONENTS, "dwPasswordLength", $Buffers[3][1]) DllStructSetData($URL_COMPONENTS, "lpszPassword", DllStructGetPtr($Buffers[3][0])) DllStructSetData($URL_COMPONENTS, "dwUrlPathLength", $Buffers[4][1]) DllStructSetData($URL_COMPONENTS, "lpszUrlPath", DllStructGetPtr($Buffers[4][0])) DllStructSetData($URL_COMPONENTS, "dwExtraInfoLength", $Buffers[5][1]) DllStructSetData($URL_COMPONENTS, "lpszExtraInfo", DllStructGetPtr($Buffers[5][0])) DllStructSetData($URL_COMPONENTS, "nScheme", $aURLArray[1]) DllStructSetData($URL_COMPONENTS, "nPort", $aURLArray[3]) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpCreateUrl", _ "ptr", DllStructGetPtr($URL_COMPONENTS), _ "dword", $ICU_ESCAPE, _ "ptr", 0, _ "dword*", 0) If @error Then Return SetError(2, 0, "") EndIf Local $URLLen = $a_iCall[4] Local $URLBuffer = DllStructCreate("wchar[" & ($URLLen + 1) & "]") $a_iCall = DllCall("winhttp.dll", "int", "WinHttpCreateUrl", _ "ptr", DllStructGetPtr($URL_COMPONENTS), _ "dword", $ICU_ESCAPE, _ "ptr", DllStructGetPtr($URLBuffer), _ "dword*", $URLLen) If @error Or Not $a_iCall[0] Then Return SetError(3, 0, "") EndIf Return SetError(0, 0, DllStructGetData($URLBuffer, 1)) EndFunc ;==>_WinHttpCreateUrl ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpDetectAutoProxyConfigUrl ; Description ...: Finds the URL for the Proxy Auto-Configuration (PAC) file. ; Syntax.........: _WinHttpDetectAutoProxyConfigUrl($iAutoDetectFlags) ; Parameters ....: $iAutoDetectFlags - Specifies what protocols to use to locate the PAC file. ; Return values .: Success - Returns URL for the PAC file. ; - Sets @error to 0 ; Failure - Returns empty string and sets @error: ; |1 - DllCall failed. ; |2 - Internal failure. ; Author ........: trancexx ; Modified.......: ; Remarks .......: $iAutoDetectFlags defined in WinHTTPconstants.au3 ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384094(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpDetectAutoProxyConfigUrl($iAutoDetectFlags) Local $ppwszAutoConfigUrl = DllStructCreate("ptr") Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpDetectAutoProxyConfigUrl", _ "hwnd", $iAutoDetectFlags, _ "ptr", DllStructGetPtr($ppwszAutoConfigUrl)) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, "") EndIf Local $ptr_string = DllStructGetData($ppwszAutoConfigUrl, 1) If $ptr_string Then Local $struct_ptr_string_Len = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $ptr_string) If @error Then Return SetError(2, 0, "") EndIf Local $string_ptr_string = DllStructCreate("wchar[" & $struct_ptr_string_Len[0] & "]", $ptr_string) Return SetError(0, 0, DllStructGetData($string_ptr_string, 1)) EndIf Return SetError(0, 0, "") EndFunc ;==>_WinHttpDetectAutoProxyConfigUrl ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpGetDefaultProxyConfiguration ; Description ...: Retrieves the default WinHTTP proxy configuration. ; Syntax.........: _WinHttpGetDefaultProxyConfiguration() ; Parameters ....: None. ; Return values .: Success - Returns array which first element [0] is integer value that contains the access type, ; second element [1] is string value that contains the proxy server list, ; third element [2] is string value that contains the proxy bypass list. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; |2 - Internal failure. ; Author ........: trancexx ; Modified.......: ; Remarks .......: Access types are defined in WinHTTPconstants.au3: ; |$WINHTTP_ACCESS_TYPE_DEFAULT_PROXY = 0 ; |$WINHTTP_ACCESS_TYPE_NO_PROXY = 1 ; |$WINHTTP_ACCESS_TYPE_NAMED_PROXY = 3 ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384095(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpGetDefaultProxyConfiguration() Local $WINHTTP_PROXY_INFO = DllStructCreate("dword dwAccessType;" & _ "ptr lpszProxy;" & _ "ptr lpszProxyBypass") Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpGetDefaultProxyConfiguration", "ptr", DllStructGetPtr($WINHTTP_PROXY_INFO)) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Local $array[3] = [DllStructGetData($WINHTTP_PROXY_INFO, "dwAccessType"), _ DllStructGetData($WINHTTP_PROXY_INFO, "lpszProxy"), _ DllStructGetData($WINHTTP_PROXY_INFO, "lpszProxyBypass")] If $array[1] Then Local $struct_lpszProxy_Len = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $array[1]) If @error Then Return SetError(2, 0, 0) EndIf Local $string_lpszProxy = DllStructCreate("wchar[" & $struct_lpszProxy_Len[0] & "]", $array[1]) Local $lpszProxy = DllStructGetData($string_lpszProxy, 1) Else $lpszProxy = "" EndIf If $array[2] Then Local $struct_lpszProxyBypass_Len = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $array[2]) If @error Then Return SetError(2, 0, 0) EndIf Local $string_lpszProxyBypass = DllStructCreate("wchar[" & $struct_lpszProxyBypass_Len[0] & "]", $array[2]) Local $lpszProxyBypass = DllStructGetData($string_lpszProxyBypass, 1) Else $lpszProxyBypass = "" EndIf Local $a_Ret[3] = [$array[0], $lpszProxy, $lpszProxyBypass] Return SetError(0, 0, $a_Ret) EndFunc ;==>_WinHttpGetDefaultProxyConfiguration ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpGetIEProxyConfigForCurrentUser ; Description ...: Retrieves the Internet Explorer proxy configuration for the current user. ; Syntax.........: _WinHttpGetIEProxyConfigForCurrentUser() ; Parameters ....: None. ; Return values .: Success - Returns array which first element [0] if 1 indicates that the Internet Explorer proxy configuration for the current user specifies "automatically detect settings", ; second element [1] is string that contains the auto-configuration URL if the Internet Explorer proxy configuration for the current user specifies "Use automatic proxy configuration", ; third element [2] is string that contains the proxy URL if the Internet Explorer proxy configuration for the current user specifies "use a proxy server", ; fourth element [3] is string that contains the optional proxy by-pass server list. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; |2 - Internal failure. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384096(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpGetIEProxyConfigForCurrentUser() Local $WINHTTP_CURRENT_USER_IE_PROXY_CONFIG = DllStructCreate("int fAutoDetect;" & _ "ptr lpszAutoConfigUrl;" & _ "ptr lpszProxy;" & _ "ptr lpszProxyBypass;") Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpGetIEProxyConfigForCurrentUser", "ptr", DllStructGetPtr($WINHTTP_CURRENT_USER_IE_PROXY_CONFIG)) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Local $array[4] = [DllStructGetData($WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, "fAutoDetect"), _ DllStructGetData($WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, "lpszAutoConfigUrl"), _ DllStructGetData($WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, "lpszProxy"), _ DllStructGetData($WINHTTP_CURRENT_USER_IE_PROXY_CONFIG, "lpszProxyBypass")] If $array[1] Then Local $struct_lpszAutoConfigUrl_Len = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $array[1]) If @error Then Return SetError(2, 0, 0) EndIf Local $string_lpszAutoConfigUrl = DllStructCreate("wchar[" & $struct_lpszAutoConfigUrl_Len[0] & "]", $array[1]) Local $lpszAutoConfigUrl = DllStructGetData($string_lpszAutoConfigUrl, 1) Else $lpszAutoConfigUrl = "" EndIf If $array[2] Then Local $struct_lpszProxy_Len = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $array[2]) If @error Then Return SetError(2, 0, 0) EndIf Local $string_lpszProxy = DllStructCreate("wchar[" & $struct_lpszProxy_Len[0] & "]", $array[2]) Local $lpszProxy = DllStructGetData($string_lpszProxy, 1) Else $lpszProxy = "" EndIf If $array[3] Then Local $struct_lpszProxyBypass_Len = DllCall("msvcrt.dll", "int:cdecl", "wcslen", "ptr", $array[3]) If @error Then Return SetError(2, 0, 0) EndIf Local $string_lpszProxyBypass = DllStructCreate("wchar[" & $struct_lpszProxyBypass_Len[0] & "]", $array[3]) Local $lpszProxyBypass = DllStructGetData($string_lpszProxyBypass, 1) Else $lpszProxyBypass = "" EndIf Local $a_Ret[4] = [$array[0], $lpszAutoConfigUrl, $lpszProxy, $lpszProxyBypass] Return SetError(0, 0, $a_Ret) EndFunc ;==>_WinHttpGetIEProxyConfigForCurrentUser ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpOpen ; Description ...: Initializes the use of WinHTTP functions and returns a WinHTTP-session handle. ; Syntax.........: _WinHttpOpen([$sUserAgent [, $iAccessType [, $sProxyName [, $sProxyBypass [, $iFlags ]]]]]) ; Parameters ....: $sUserAgent - String that contains the name of the application or entity calling the WinHTTP functions. ; $iAccessType - Type of access required. ; $sProxyName - String that contains the name of the proxy server to use when proxy access is specified by setting $iAccessType to $WINHTTP_ACCESS_TYPE_NAMED_PROXY. ; $sProxyBypass - String that contains an optional list of host names or IP addresses, or both, that should not be routed through the proxy when $iAccessType is set to $WINHTTP_ACCESS_TYPE_NAMED_PROXY. ; $iFlag - Integer that contains the flags that indicate various options affecting the behavior of this function. ; Return values .: Success - Returns valid session handle. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: For asynchronous mode set $iFlag to $WINHTTP_FLAG_ASYNC ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384098(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpOpen($sUserAgent = "AutoIt v3", $iAccessType = $WINHTTP_ACCESS_TYPE_NO_PROXY, $sProxyName = $WINHTTP_NO_PROXY_NAME, $sProxyBypass = $WINHTTP_NO_PROXY_BYPASS, $iFlag = 0) Local $a_hCall = DllCall("winhttp.dll", "hwnd", "WinHttpOpen", _ "wstr", $sUserAgent, _ "dword", $iAccessType, _ "wstr", $sProxyName, _ "wstr", $sProxyBypass, _ "dword", $iFlag) If @error Or Not $a_hCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, $a_hCall[0]) EndFunc ;==>_WinHttpOpen ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpOpenRequest ; Description ...: Creates an HTTP request handle. ; Syntax.........: _WinHttpOpenRequest($hConnect [, $sVerb [, $sObjectName[, $sVersion [, $sReferrer [, $ppwszAcceptTypes [, $iFlags]]]]]]) ; Parameters ....: $hConnect - Handle to an HTTP session returned by _WinHttpConnect(). ; $sVerb - String that contains the HTTP verb to use in the request. Default is "GET". ; $sObjectName - String that contains the name of the target resource of the specified HTTP verb. ; $sVersion - String that contains the HTTP version. Default is "HTTP/1.1" ; $sReferrer - String that specifies the URL of the document from which the URL in the request $sObjectName was obtained. Default is $WINHTTP_NO_REFERER. ; $sAcceptTypes - String that specifies media types accepted by the client. Default is $WINHTTP_DEFAULT_ACCEPT_TYPES ; $iFlags - Integer that contains the Internet flag values. Default is $WINHTTP_FLAG_ESCAPE_DISABLE ; Return values .: Success - Returns valid session handle. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384099(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpOpenRequest($hConnect, $sVerb = "GET", $sObjectName = "", $sVersion = "HTTP/1.1", $sReferrer = $WINHTTP_NO_REFERER, $sAcceptTypes = $WINHTTP_DEFAULT_ACCEPT_TYPES, $iFlags = $WINHTTP_FLAG_ESCAPE_DISABLE) Local $a_hCall = DllCall("winhttp.dll", "hwnd", "WinHttpOpenRequest", _ "hwnd", $hConnect, _ "wstr", StringUpper($sVerb), _ "wstr", $sObjectName, _ "wstr", StringUpper($sVersion), _ "wstr", $sReferrer, _ "wstr*", $sAcceptTypes, _ "dword", $iFlags) If @error Or Not $a_hCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, $a_hCall[0]) EndFunc ;==>_WinHttpOpenRequest ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpQueryDataAvailable ; Description ...: Returns the availability to be read with WinHttpReadData. ; Syntax.........: _WinHttpQueryDataAvailable($hRequest) ; Parameters ....: $hRequest - handle returned by _WinHttpOpenRequest(). ; Return values .: Success - Returns 1 if data is available. ; - Returns 0 if no data is available. ; - @extended receives the number of available bytes. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: _WinHttpReceiveResponse() must have been called for this handle and have completed before _WinHttpQueryDataAvailable is called. ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384101(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpQueryDataAvailable($hRequest) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryDataAvailable", _ "hwnd", $hRequest, _ "dword*", 0) If @error Then Return SetError(1, 0, 0) EndIf Return SetError(0, $a_iCall[2], $a_iCall[0]) EndFunc ;==>_WinHttpQueryDataAvailable ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpQueryHeaders ; Description ...: Retrieves header information associated with an HTTP request. ; Syntax.........: _WinHttpQueryHeaders($hRequest, $iInfoLevel, $sName) ; Parameters ....: $hRequest - handle returned by _WinHttpOpenRequest(). ; $iInfoLevel - Specifies a combination of attribute and modifier flags. Default is $WINHTTP_QUERY_RAW_HEADERS_CRLF. ; $sName - String that contains the header name. Default is $WINHTTP_HEADER_NAME_BY_INDEX. ; Return values .: Success - Returns string that contains header. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - Initial DllCall failed. ; |2 - Main DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384102(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpQueryHeaders($hRequest, $iInfoLevel = $WINHTTP_QUERY_RAW_HEADERS_CRLF, $sName = $WINHTTP_HEADER_NAME_BY_INDEX) Local $struct = DllStructCreate("dword") Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _ "hwnd", $hRequest, _ "dword", $iInfoLevel, _ "ptr", $sName, _ "ptr", 0, _ "ptr", DllStructGetPtr($struct), _ "ptr", 0) If @error Or $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Local $i_size = DllStructGetData($struct, 1) If Not $i_size Then Return SetError(0, 0, "") EndIf Local $lpBuffer = DllStructCreate("wchar[" & $i_size & "]") $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryHeaders", _ "hwnd", $hRequest, _ "dword", $iInfoLevel, _ "ptr", $sName, _ "ptr", DllStructGetPtr($lpBuffer), _ "ptr", DllStructGetPtr($struct), _ "ptr", 0) If @error Or Not $a_iCall[0] Then Return SetError(2, 0, 0) EndIf Return SetError(0, 0, DllStructGetData($lpBuffer, 1)) EndFunc ;==>_WinHttpQueryHeaders ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpQueryOption ; Description ...: Queries an Internet option on the specified handle. ; Syntax.........: _WinHttpQueryOption($hInternet, $iOption) ; Parameters ....: $hInternet - Handle on which to query information. ; $iOption - Integer value that contains the Internet option to query. ; Return values .: Success - Returns data containing requested information. ; - Sets @error to 0 ; Failure - Returns empty string and sets @error: ; |1 - Initial DllCall failed. ; |2 - Main DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: Type of the returned data varies on request. ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384103(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpQueryOption($hInternet, $iOption) Local $struct = DllStructCreate("dword") Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryOption", _ "hwnd", $hInternet, _ "dword", $iOption, _ "ptr", 0, _ "ptr", DllStructGetPtr($struct)) If @error Or $a_iCall[0] Then Return SetError(1, 0, "") EndIf Local $i_size = DllStructGetData($struct, 1) Local $lpBuffer Switch $iOption Case $WINHTTP_OPTION_CONNECTION_INFO, $WINHTTP_OPTION_PASSWORD, $WINHTTP_OPTION_PROXY_PASSWORD, $WINHTTP_OPTION_PROXY_USERNAME, $WINHTTP_OPTION_URL, $WINHTTP_OPTION_USERNAME, $WINHTTP_OPTION_USER_AGENT, _ $WINHTTP_OPTION_PASSPORT_COBRANDING_TEXT, $WINHTTP_OPTION_PASSPORT_COBRANDING_URL $lpBuffer = DllStructCreate("wchar[" & $i_size & "]") Case $WINHTTP_OPTION_PARENT_HANDLE, $WINHTTP_OPTION_CALLBACK $lpBuffer = DllStructCreate("ptr") Case $WINHTTP_OPTION_CONNECT_TIMEOUT, $WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH, $WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW, $WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM, _ $WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH, $WINHTTP_OPTION_CONNECT_RETRIES, $WINHTTP_OPTION_EXTENDED_ERROR, $WINHTTP_OPTION_HANDLE_TYPE, $WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER, _ $WINHTTP_OPTION_MAX_CONNS_PER_SERVER, $WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS, $WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT, $WINHTTP_OPTION_RECEIVE_TIMEOUT, _ $WINHTTP_OPTION_RESOLVE_TIMEOUT, $WINHTTP_OPTION_SECURITY_FLAGS, $WINHTTP_OPTION_SECURITY_KEY_BITNESS, $WINHTTP_OPTION_SEND_TIMEOUT $lpBuffer = DllStructCreate("int") Case Else DllStructCreate("byte[" & $i_size & "]") EndSwitch $a_iCall = DllCall("winhttp.dll", "int", "WinHttpQueryOption", _ "hwnd", $hInternet, _ "dword", $iOption, _ "ptr", DllStructGetPtr($lpBuffer), _ "ptr", DllStructGetPtr($struct)) If @error Or Not $a_iCall[0] Then Return SetError(2, 0, "") EndIf Return SetError(0, 0, DllStructGetData($lpBuffer, 1)) EndFunc ;==>_WinHttpQueryOption ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpReadData ; Description ...: Reads data from a handle opened by the _WinHttpOpenRequest() function. ; Syntax.........: _WinHttpReadData($hRequest [, iMode [, $iNumberOfBytesToRead]]) ; Parameters ....: $hRequest - Valid handle returned from a previous call to _WinHttpOpenRequest(). ; $iMode - Integer representing reading mode. Default is 0 (charset is decoded as it is ANSI). ; $iNumberOfBytesToRead - Integer value that contains the number of bytes to read. Default is 8192 bytes. ; Return values .: Success - Returns data read. ; - @extended receives the number of bytes read. ; - Sets @error to 0 ; Special: Sets @error to -1 if no more data to read (end reached). ; Failure - Returns empty string and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx, ProgAndy ; Modified.......: ; Remarks .......: iMode can have these values: ; |0 - ANSI ; |1 - UTF8 ; |2 - Binary ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384104(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpReadData($hRequest, $iMode = 0, $iNumberOfBytesToRead = 8192) Local $lpBuffer Switch $iMode Case 1, 2 $lpBuffer = DllStructCreate("byte[" & $iNumberOfBytesToRead & "]") Case Else $iMode = 0 $lpBuffer = DllStructCreate("char[" & $iNumberOfBytesToRead & "]") EndSwitch Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpReadData", _ "hwnd", $hRequest, _ "ptr", DllStructGetPtr($lpBuffer), _ "ulong", $iNumberOfBytesToRead, _ "dword*", 0) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, "") EndIf If Not $a_iCall[4] Then Return SetError(-1, 0, "") EndIf Switch $a_iCall[4] < $iNumberOfBytesToRead Case True Switch $iMode Case 0 Return SetError(0, $a_iCall[4], StringLeft(DllStructGetData($lpBuffer, 1), $a_iCall[4])) Case 1 Return SetError(0, $a_iCall[4], BinaryToString(BinaryMid(DllStructGetData($lpBuffer, 1), 1, $a_iCall[4]), 4)) Case 2 Return SetError(0, $a_iCall[4], BinaryMid(DllStructGetData($lpBuffer, 1), 1, $a_iCall[4])) EndSwitch Case Else Switch $iMode Case 0, 2 Return SetError(0, $a_iCall[4], DllStructGetData($lpBuffer, 1)) Case 1 Return SetError(0, $a_iCall[4], BinaryToString(DllStructGetData($lpBuffer, 1), 4)) EndSwitch EndSwitch EndFunc ;==>_WinHttpReadData ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpReceiveResponse ; Description ...: Waits to receive the response to an HTTP request initiated by WinHttpSendRequest(). ; Syntax.........: _WinHttpReceiveResponse($hRequest) ; Parameters ....: $hRequest - Handle returned by _WinHttpOpenRequest() and sent by _WinHttpSendRequest(). ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: Must call _WinHttpReceiveResponse() before _WinHttpQueryDataAvailable() and _WinHttpReadData(). ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384105(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpReceiveResponse($hRequest) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpReceiveResponse", _ "hwnd", $hRequest, _ "ptr", 0) If @error Or Not $a_iCall[0] Then SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpReceiveResponse ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpSendRequest ; Description ...: Sends the specified request to the HTTP server. ; Syntax.........: _WinHttpSendRequest($hRequest [, $sHeaders [, $sOptional [, $iTotalLength [, $iContext]]]]) ; Parameters ....: $hRequest - Handle returned by _WinHttpOpenRequest(). ; $sHeaders - String that contains the additional headers to append to the request. Default is $WINHTTP_NO_ADDITIONAL_HEADERS. ; $sOptional - String that contains any optional data to send immediately after the request headers. Default is $WINHTTP_NO_REQUEST_DATA. ; $iTotalLength - An unsigned long integer value that contains the length, in bytes, of the total optional data sent. Default is 0. ; $iContext - A pointer to a pointer-sized variable that contains an application-defined value that is passed, with the request handle, to any callback functions. Default is 0. ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: Specifying optional data ($sOptional) will cause $iTotalLength to receive the size of that data if left default value. ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384110(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpSendRequest($hRequest, $sHeaders = $WINHTTP_NO_ADDITIONAL_HEADERS, $sOptional = $WINHTTP_NO_REQUEST_DATA, $iTotalLength = 0, $iContext = 0) Local $iOptionalLength = StringLen($sOptional) Local $structOptional = DllStructCreate("char[" & $iOptionalLength + 1 & "]") DllStructSetData($structOptional, 1, $sOptional) If Not $iTotalLength Or $iTotalLength < $iOptionalLength Then $iTotalLength += $iOptionalLength EndIf Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpSendRequest", _ "hwnd", $hRequest, _ "wstr", $sHeaders, _ "dword", 0, _ "ptr", DllStructGetPtr($structOptional), _ "dword", $iOptionalLength, _ "dword", $iTotalLength, _ "ptr", $iContext) If @error Or Not $a_iCall[0] Then SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpSendRequest ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpSetCredentials ; Description ...: Passes the required authorization credentials to the server. ; Syntax.........: _WinHttpSetCredentials($hRequest, $AuthTargets, $AuthScheme, $sUserName, $sPassword) ; Parameters ....: $hRequest - Valid handle returned by _WinHttpOpenRequest(). ; $AuthTargets - Integer that specifies a flag that contains the authentication target. ; $AuthScheme - Integer that specifies a flag that contains the authentication scheme. ; $sUserName - String that contains a valid user name. ; $sPassword - String that contains a valid password. ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384112(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpSetCredentials($hRequest, $iAuthTargets, $iAuthScheme, $sUserName, $sPassword) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpSetCredentials", _ "hwnd", $hRequest, _ "dword", $iAuthTargets, _ "dword", $iAuthScheme, _ "wstr", $sUserName, _ "wstr", $sPassword, _ "ptr", 0) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpSetCredentials ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpSetDefaultProxyConfiguration ; Description ...: Sets the default WinHTTP proxy configuration. ; Syntax.........: _WinHttpSetDefaultProxyConfiguration($iAccessType, $lpszProxy, $lpszProxyBypass) ; Parameters ....: $iAccessType - Integer value that contains the access type. ; $lpszProxy - String value that contains the proxy server list. ; $lpszProxyBypass - String value that contains the proxy bypass list. ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384113(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpSetDefaultProxyConfiguration($iAccessType, $lpszProxy, $lpszProxyBypass) Local $struct_Proxy = DllStructCreate("wchar[" & StringLen($lpszProxy) + 1 & "]") DllStructSetData($struct_Proxy, 1, $lpszProxy) Local $struct_ProxyBypass = DllStructCreate("wchar[" & StringLen($lpszProxyBypass) + 1 & "]") DllStructSetData($struct_ProxyBypass, 1, $lpszProxyBypass) Local $WINHTTP_PROXY_INFO = DllStructCreate("dword dwAccessType;" & _ "ptr lpszProxy;" & _ "ptr lpszProxyBypass") DllStructSetData($WINHTTP_PROXY_INFO, "dwAccessType", $iAccessType) DllStructSetData($WINHTTP_PROXY_INFO, "lpszProxy", DllStructGetPtr($struct_Proxy)) DllStructSetData($WINHTTP_PROXY_INFO, "lpszProxyBypass", DllStructGetPtr($struct_ProxyBypass)) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpSetDefaultProxyConfiguration", "ptr", DllStructGetPtr($WINHTTP_PROXY_INFO)) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpSetDefaultProxyConfiguration ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpSetOption ; Description ...: Sets an Internet option. ; Syntax.........: _WinHttpSetOption($hInternet, $iOption, $setting) ; Parameters ....: $hInternet - Handle on which to set data. ; $iOption - Integer value that contains the Internet option to set. ; $setting - String value that contains desired setting. ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384114(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpSetOption($hInternet, $iOption, $setting) Local $lpBuffer = DllStructCreate("wchar[" & StringLen($setting) + 1 & "]") DllStructSetData($lpBuffer, 1, $setting) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpSetOption", _ "hwnd", $hInternet, _ "dword", $iOption, _ "ptr", DllStructGetPtr($lpBuffer), _ "dword", DllStructGetSize($lpBuffer)) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpSetOption ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpSetStatusCallback ; Description ...: Sets up a callback function that WinHTTP can call as progress is made during an operation. ; Syntax.........: _WinHttpSetStatusCallback($hInternet, $pInternetCallback, $iNotificationFlags) ; Parameters ....: $hInternet - Handle for which the callback is to be set. ; $fInternetCallback - Callback function to call when progress is made. ; $iNotificationFlags - Integer value that specifies flags to indicate which events activate the callback function. Default is $WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS. ; Return values .: Success - Returns a pointer to the previously defined status callback function or NULL if there was no previously defined status callback function. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: ProgAndy ; Modified.......: trancexx ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384115(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpSetStatusCallback($hInternet, $fInternetCallback, $iNotificationFlags = $WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS) Local $a_pCall = DllCall("winhttp.dll", "ptr", "WinHttpSetStatusCallback", _ "hwnd", $hInternet, _ "ptr", DllCallbackGetPtr($fInternetCallback), _ "dword", $iNotificationFlags, _ "ptr", 0) If @error Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, $a_pCall[0]) EndFunc ;==>_WinHttpSetStatusCallback ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpSetTimeouts ; Description ...: Sets time-outs involved with HTTP transactions. ; Syntax.........: _WinHttpSetTimeouts($hInternet, $iResolveTimeout, $iConnectTimeout, $iSendTimeout, $iReceiveTimeout) ; Parameters ....: $hInternet - Handle returned by _WinHttpOpen() or _WinHttpOpenRequest(). ; $iResolveTimeout - Integer that specifies the time-out value, in milliseconds, to use for name resolution. ; $iConnectTimeout - Integer that specifies the time-out value, in milliseconds, to use for server connection requests. ; $iSendTimeout - Integer that specifies the time-out value, in milliseconds, to use for sending requests. ; $iReceiveTimeout - integer that specifies the time-out value, in milliseconds, to receive a response to a request. ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: Initial values are: - $iResolveTimeout = 0 ; - $iConnectTimeout = 60000 ; - $iSendTimeout = 30000 ; - $iReceiveTimeout = 30000 ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384116(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpSetTimeouts($hInternet, $iResolveTimeout, $iConnectTimeout, $iSendTimeout, $iReceiveTimeout) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpSetTimeouts", _ "hwnd", $hInternet, _ "int", $iResolveTimeout, _ "int", $iConnectTimeout, _ "int", $iSendTimeout, _ "int", $iReceiveTimeout) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, 0, 1) EndFunc ;==>_WinHttpSetTimeouts ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpTimeFromSystemTime ; Description ...: Formats a system date and time according to the HTTP version 1.0 specification. ; Syntax.........: _WinHttpTimeFromSystemTime() ; Parameters ....: None. ; Return values .: Success - Returns 1. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - Initial DllCall failed. ; |2 - Main DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384117(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpTimeFromSystemTime() Local $SYSTEMTIME = DllStructCreate("ushort wYear;" & _ "ushort wMonth;" & _ "ushort wDayOfWeek;" & _ "ushort wDay;" & _ "ushort wHour;" & _ "ushort wMinute;" & _ "ushort wSecond;" & _ "ushort wMilliseconds") DllCall("kernel32.dll", "none", "GetSystemTime", "ptr", DllStructGetPtr($SYSTEMTIME)) If @error Then Return SetError(1, 0, 0) EndIf Local $sTime = DllStructCreate("wchar[62]") Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpTimeFromSystemTime", _ "ptr", DllStructGetPtr($SYSTEMTIME), _ "ptr", DllStructGetPtr($sTime)) If @error Or Not $a_iCall[0] Then Return SetError(2, 0, 0) EndIf Return SetError(0, 0, DllStructGetData($sTime, 1)) EndFunc ;==>_WinHttpTimeFromSystemTime ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpTimeToSystemTime ; Description ...: Takes an HTTP time/date string and converts it to array (SYSTEMTIME structure values). ; Syntax.........: _WinHttpTimeToSystemTime($http_time) ; Parameters ....: $http_time - Date/time string to convert. ; Return values .: Success - Returns array which first element [0] is Year, ; second element [1] is Month, ; third element [2] is DayOfWeek, ; fourth element [3] is Day, ; fifth element [4] is Hour, ; sixth element [5] is Minute, ; seventh element [6] is Second., ; eighth element [7] is Milliseconds. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx ; Modified.......: ; Remarks .......: ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384118(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpTimeToSystemTime($http_time) Local $SYSTEMTIME = DllStructCreate("ushort wYear;" & _ "ushort wMonth;" & _ "ushort wDayOfWeek;" & _ "ushort wDay;" & _ "ushort wHour;" & _ "ushort wMinute;" & _ "ushort wSecond;" & _ "ushort wMilliseconds") Local $sTime = DllStructCreate("wchar[62]") DllStructSetData($sTime, 1, $http_time) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpTimeToSystemTime", _ "ptr", DllStructGetPtr($sTime), _ "ptr", DllStructGetPtr($SYSTEMTIME)) If @error Or Not $a_iCall[0] Then Return SetError(2, 0, 0) EndIf Local $a_Ret[8] = [DllStructGetData($SYSTEMTIME, "wYear"), _ DllStructGetData($SYSTEMTIME, "wMonth"), _ DllStructGetData($SYSTEMTIME, "wDayOfWeek"), _ DllStructGetData($SYSTEMTIME, "wDay"), _ DllStructGetData($SYSTEMTIME, "wHour"), _ DllStructGetData($SYSTEMTIME, "wMinute"), _ DllStructGetData($SYSTEMTIME, "wSecond"), _ DllStructGetData($SYSTEMTIME, "wMilliseconds")] Return SetError(0, 0, $a_Ret) EndFunc ;==>_WinHttpTimeToSystemTime ; #FUNCTION# ;=============================================================================== ; ; Name...........: _WinHttpWriteData ; Description ...: Writes request data to an HTTP server. ; Syntax.........: _WinHttpWriteData($hRequest, $data [, $iMode]) ; Parameters ....: $hRequest - Valid handle returned by _WinHttpSendRequest(). ; $data - Data to write. ; $iMode - Integer representing writing mode. Default is 0 - write ANSI string. ; Return values .: Success - Returns 1 ; - @extended receives the number of bytes written. ; - Sets @error to 0 ; Failure - Returns 0 and sets @error: ; |1 - DllCall failed. ; Author ........: trancexx, ProgAndy ; Modified.......: ; Remarks .......: $data variable is either string or binary data to write. ; $iMode can have these values: ; |0 - to write ANSI string ; |1 - to write binary data ; Related .......: ; Link ..........; http://msdn.microsoft.com/en-us/library/aa384120(VS.85).aspx ; Example .......; Yes ; ;========================================================================================== Func _WinHttpWriteData($hRequest, $data, $iMode = 0) Local $iNumberOfBytesToWrite, $structure_Data Switch $iMode Case 1 $iNumberOfBytesToWrite = BinaryLen($data) $structure_Data = DllStructCreate("byte[" & $iNumberOfBytesToWrite & "]") Case Else $iNumberOfBytesToWrite = StringLen($data) $structure_Data = DllStructCreate("char[" & $iNumberOfBytesToWrite + 1 & "]") EndSwitch DllStructSetData($structure_Data, 1, $data) Local $a_iCall = DllCall("winhttp.dll", "int", "WinHttpWriteData", _ "hwnd", $hRequest, _ "ptr", DllStructGetPtr($structure_Data), _ "dword", $iNumberOfBytesToWrite, _ "dword*", 0) If @error Or Not $a_iCall[0] Then Return SetError(1, 0, 0) EndIf Return SetError(0, $a_iCall[4], 1) EndFunc ;==>_WinHttpWriteData