// InternetOpen ---:InternetConnect----HttpOpenRequest----InternetSetOption -HttpAddRequestHeaders---HttpSendRequestEx
Code:
Option Explicit
Event HttpError(Status As String)
Event HttpOpen(Status As String)
Event HttpSend(SendNum As Long, _
Total As Long, _
Status As String, _
Ncancel As Boolean) '???????,??,??????
Event HttpComplete(????? As String, ??cookie As String, ????() As Byte)
Private Declare Sub Sleep Lib "Kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Sub CopyMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, _
ByVal length As Long)
Private Declare Function InternetOpenUrl _
Lib "wininet.dll" _
Alias "InternetOpenUrlA" (ByVal hOpen As Long, _
ByVal sUrl As String, _
ByVal sHeaders As String, _
ByVal lLength As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Private Declare Function InternetOpen _
Lib "wininet.dll" _
Alias "InternetOpenA" (ByVal sAgent As String, _
ByVal lAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As Long) As Long
Private Declare Function InternetConnect _
Lib "wininet.dll" _
Alias "InternetConnectA" (ByVal pub_lngInternetSession As Long, _
ByVal sServerName As String, _
ByVal nServerPort As Integer, _
ByVal sUsername As String, _
ByVal sPassword As String, _
ByVal lService As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Private Declare Function InternetReadFile _
Lib "wininet.dll" (ByVal hFile As Long, _
sBuffer As Any, _
ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetWriteFile _
Lib "wininet.dll" (ByVal hFile As Long, _
buffer As Any, _
ByVal lNumBytesToWrite As Long, _
dwNumberOfBytesWritten As Long) As Integer
Private Declare Function InternetSetCookie _
Lib "wininet.dll" _
Alias "InternetSetCookieA" (ByVal lpszUrlName As String, _
ByVal lpszCookieName As String, _
ByVal lpszCookieData As String) As Boolean
Private Declare Function InternetGetCookie _
Lib "wininet.dll" _
Alias "InternetGetCookieA" (ByVal lpszUrlName As String, _
ByVal lpszCookieName As String, _
ByVal lpszCookieData As String, _
lpdwSize As Long) As Boolean
Private Declare Function InternetCloseHandle _
Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Type INTERNET_BUFFERS
dwStructSize As Long ' used for API versioning. Set to sizeof(INTERNET_BUFFERS)
Next As Long ' INTERNET_BUFFERS chain of buffers
lpcszHeader As Long ' pointer to headers (may be NULL)
dwHeadersLength As Long ' length of headers if not NULL
dwHeadersTotal As Long ' size of headers if not enough buffer
lpvBuffer As Long ' pointer to data buffer (may be NULL)
dwBufferLength As Long ' length of data buffer if not NULL
dwBufferTotal As Long ' total size of chunk, or content-length if not chunked
dwOffsetLow As Long ' used for read-ranges (only used in HttpSendRequest2)
dwOffsetHigh As Long
End Type
Private InternetBUFFERS As INTERNET_BUFFERS
Private Declare Function HttpOpenRequest _
Lib "wininet.dll" _
Alias "HttpOpenRequestA" (ByVal hHttpSession As Long, _
ByVal sVerb As String, _
ByVal sObjectName As String, _
ByVal sVersion As String, _
ByVal sReferer As String, _
ByVal something As Long, _
ByVal lFlags As Long, _
ByVal lContext As Long) As Long
Private Declare Function HttpSendRequest _
Lib "wininet.dll" _
Alias "HttpSendRequestA" (ByVal hHttpRequest As Long, _
ByVal sHeaders As String, _
ByVal lHeadersLength As Long, _
sOptional As Any, _
ByVal lOptionalLength As Long) As Integer
Private Declare Function HttpSendRequestEx _
Lib "wininet.dll" _
Alias "HttpSendRequestExA" (ByVal hHttpRequest As Long, _
lpBuffersIn As INTERNET_BUFFERS, _
ByVal lpBuffersOut As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private Declare Function HttpEndRequest _
Lib "wininet.dll" _
Alias "HttpEndRequestA" (ByVal hHttpRequest As Long, _
ByVal lpBuffersOut As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private Declare Function HttpQueryInfo _
Lib "wininet.dll" _
Alias "HttpQueryInfoA" (ByVal hHttpRequest As Long, _
ByVal lInfoLevel As Long, _
ByRef sBuffer As Any, _
ByRef lBufferLength As Long, _
ByRef lIndex As Long) As Integer
Private Declare Function InternetQueryOption _
Lib "wininet.dll" _
Alias "InternetQueryOptionA" (ByVal hInternet As Long, _
ByVal lOption As Long, _
ByRef sBuffer As Any, _
ByRef lBufferLength As Long) As Integer
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Const INTERNET_OPEN_TYPE_PROXY = 3
Const INTERNET_INVALID_PORT_NUMBER = 0
Const INTERNET_DEFAULT_HTTP_PORT = 80
Const INTERNET_SERVICE_HTTP = 3
Const SECURITY_FLAG_IGNORE_UNKNOWN_CA = &H100
Const INTERNET_FLAG_ASYNC = &H10000000 ' this request is asynchronous (where supported)
Const INTERNET_FLAG_TRANSFER_BINARY = &H2
Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000 ' don't write this item to the cache
Const INTERNET_FLAG_DONT_CACHE = INTERNET_FLAG_NO_CACHE_WRITE
Const INTERNET_FLAG_SECURE = &H800000 ' use PCT/SSL if applicable (HTTP)
Const INTERNET_FLAG_KEEP_CONNECTION = &H400000 ' use keep-alive semantics
Const INTERNET_FLAG_MULTIPART = &H200000
Const INTERNET_FLAG_NO_AUTO_REDIRECT = &H200000 ' don't handle redirections automatically
Const INTERNET_FLAG_READ_PREFETCH = &H100000 ' do background read prefetch
Const INTERNET_FLAG_RELOAD = &H80000000 ' ==Brings the data across the wire even if it locally cached.
Const INTERNET_FLAG_NO_COOKIES = &H80000 ' no automatic cookie handling
Const INTERNET_FLAG_NO_AUTH = &H40000 ' no automatic authentication handling
Const INTERNET_FLAG_CACHE_IF_NET_FAIL = &H10000 ' return cache file if net request fails
Const INTERNET_STATUS_REQUEST_COMPLETE = 100 '????????
Const INTERNET_FLAG_EXISTING_CONNECT = &H20000000
Const INTERNET_DEFAULT_HTTPS_PORT = 443
Const INTERNET_DEFAULT_SOCKS_PORT = 1080
Const INTERNET_OPTION_CONNECT_TIMEOUT = 2
Const INTERNET_OPTION_RECEIVE_TIMEOUT = 6
Const INTERNET_OPTION_SEND_TIMEOUT = 5
Const INTERNET_OPTION_USERNAME = 28
Const INTERNET_OPTION_PASSWORD = 29
Const INTERNET_OPTION_PROXY_USERNAME = 43
Const INTERNET_OPTION_PROXY_PASSWORD = 44
Const HTTP_QUERY_CONTENT_LENGTH = 5 '???? ??? ??? ????.
Const HTTP_QUERY_STATUS_CODE = 19 '?? ?? ??? ????? ????.
Const HTTP_QUERY_LAST_MODIFIED = 11
Const HTTP_QUERY_PRAGMA = 17
Const HTTP_QUERY_VERSION = 18
Const HTTP_QUERY_FORWARDED = 30
Const HTTP_QUERY_SERVER = 37
Const HTTP_QUERY_USER_AGENT = 39
Const HTTP_QUERY_SET_COOKIE = 43
Const HTTP_QUERY_REQUEST_METHOD = 45
Const HTTP_STATUS_DENIED = 401
Const HTTP_STATUS_PROXY_AUTH_REQ = 407
Const HTTP_QUERY_STATUS_TEXT = 20
Const HTTP_QUERY_RAW_HEADERS = 21
Const HTTP_QUERY_RAW_HEADERS_CRLF = 22
Const HTTP_QUERY_CONTENT_TYPE = 1
Const WININET_API_FLAG_ASYNC = 1 '// force async operation
Const WININET_API_FLAG_SYNC = 4 '// force sync operation
Const WININET_API_FLAG_USE_CONTEXT = 8 '// use value supplied in dwContext (even if 0)
Const HSR_ASYNC = WININET_API_FLAG_ASYNC '// force async
Const HSR_SYNC = WININET_API_FLAG_SYNC '// force sync
Const INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = &H2000
Const INTERNET_OPTION_SECURITY_FLAGS = 31
Const INTERNET_FLAG_IGNORE_CERT_CN_INVALID = &H1000
Const HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT '// use dwContext value
Const HSR_INITIATE = 8 '// iterative operation (completed by HttpEndRequest)
Const HSR_DOWNLOAD = 16 '// download to file
Const HSR_CHUNKED = 32 '// operation is send of chunked data
Const INTERNET_OPTION_VERSION = 40
Const HTTP_ADDREQ_FLAG_REPLACE = &H80000000
Const HTTP_ADDREQ_FLAG_ADD_IF_NEW = &H10000000
Const HTTP_ADDREQ_FLAG_ADD = &H20000000
Const HTTP_QUERY_FLAG_REQUEST_HEADERS = &H80000000
Const HTTP_QUERY_FLAG_NUMBER = &H20000000
Private Declare Function InternetFindNextFile _
Lib "wininet.dll" _
Alias "InternetFindNextFileA" (ByVal hFind As Long, _
lpvFindData As WIN32_FIND_DATA) As Long
Private Const FTP_TRANSFER_TYPE_BINARY As Long = &H2 '0x00000002
Private Const INTERNET_SERVICE_FTP = 1
Private Declare Function InternetSetOption _
Lib "wininet.dll" _
Alias "InternetSetOptionA" (ByVal hInternet As Long, _
ByVal lOption As Long, _
ByRef sBuffer As Any, _
ByVal lBufferLength As Long) As Integer
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Declare Function HttpAddRequestHeaders _
Lib "wininet.dll" _
Alias "HttpAddRequestHeadersA" (ByVal hHttpRequest As Long, _
ByVal sHeaders As String, _
ByVal lHeadersLength As Long, _
ByVal lModifiers As Long) As Integer
Private Declare Function InternetSetOptionStr _
Lib "wininet.dll" _
Alias "InternetSetOptionA" (ByVal hInternet As Long, _
ByVal lOption As Long, _
ByVal sBuffer As String, _
ByVal lBufferLength As Long) As Integer
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type
Dim bProcess As Boolean
Dim stStart As Single
Enum UploadSpeedEnum
UploadLowSpeed = -1 ' 50? ??? Sleep(1)? ?? / CPU???(H) 50%
UploadNormalSpeed = 0 '100? ??? Sleep(1)? ?? / CPU???(H) 70%
UploadHighSpeed = 1 '150? ??? Sleep(1)? ?? / CPU???(H) 80%
End Enum
Private m_LonLenPostArray As Long
Private m_StrReturnCookie As String
Private m_StrReturnHeads As String
Private m_StrStatus As String
Private m_BytReturnArray() As Byte
Public Function ReturnArray() As Byte
ReturnArray = m_BytReturnArray()
End Function
Public Property Get ReturnCookie() As String '?????cookei
ReturnCookie = m_StrReturnCookie
End Property
Public Property Get LenPostArray() As Long '??post?????,????
LenPostArray = m_LonLenPostArray
End Property