General Win32 Internet Functions

The general Win32 Internet functions perform basic Internet file manipulations.

InternetAttemptConnect

DWORD InternetAttemptConnect( DWORD dwReserved

);

Attempts to make a connection to the Internet. This function allows an application to first attempt to connect before issuing any requests. If the connection fails, the application can enter off-line mode.

  • Returns ERROR_SUCCESS if successful, or a Win32 error value otherwise.
dwReserved

Reserved; must be zero.

InternetCanonicalizeUrl

BOOL InternetCanonicalizeUrl( IN LPCTSTR lpszUrl,

OUT LPTSTR lpszBuffer,

IN OUT LPDWORD lpdwBufferLength, IN DWORD dwFlags

);

Converts a URL to a canonical form, which includes converting unsafe characters into escape sequences.

  • Returns TRUE if successful, or FALSE otherwise. To get extended error information, call GetLastError . Possible errors include:

ERROR_INVALID_PARAMETER

ERROR_INSUFFICIENT_BUFFER

ERROR_BAD_PATHNAME

ERROR_INTERNET_INVALID_URL

Bad string, buffer, buffer size, or flags parameter.

Canonicalized URL is too large to fit in the buffer provided. The

*lpdwBufferLength parameter is set to the size, in bytes, of the buffer required to hold the resultant, canonicalized URL.

The URL could not be canonicalized.

The format of the URL is invalid.

lpszUrl

Address of the input URL to canonicalize.

lpszBuffer

Address of the buffer that receives the resulting canonicalized URL.

lpdwBufferLength

Length, in bytes, of the lpszBuffer buffer. If the function succeeds, this parameter receives the length of the lpszBuffer buffer梩he length

does not include the terminating null. If the function fails, this

parameter receives the required length, in bytes, of the lpszBuffer

buffer梩he required length includes the terminating null.

dwFlags

Flags that control canonicalization. Can be one of these values:

Value Meaning

ICU_DECODE Convert %XX escape sequences to characters.

ICU_NO_ENCODE Do not convert unsafe characters to escape sequence.

ICU_NO_META Do not remove meta sequences (such as "." and "..") from the URL.

ICU_ENCODE_SPACES_ONLY Encode spaces only.

ICU_BROWSER_MODE Do not encode or decode characters after #' or '?', and do not remove trailing white space after '?'. If this value is not specified, the entire URL is encoded and trailing white space is removed.

If no flags are specified, the function converts all unsafe characters and meta sequences (such as \.,\ .., and \...) to escape sequences.

InternetCanonicalizeUrl always encodes by default, even if the ICU_DECODE flag has been specified. To decode without re-encoding, use ICU_DECODE | ICU_NO_ENCODE. If the ICU_DECODE flag is used without ICU_NO_ENCODE, the URL is decoded before being parsed; unsafe characters then are re-encoded after parsing. This function will handle arbitrary protocol schemes, but to do so it must make inferences from the unsafe character set.

InternetCloseHandle

BOOL InternetCloseHandle( IN HINTERNET hInet

);

Closes a single Internet handle or a subtree of Internet handles.

  • Returns TRUE if the handle is successfully closed, or FALSE otherwise. To get extended error information, call GetLastError .
hInet

Valid Internet handle to be closed.

This function can be used to close any Internet handle or subtree of handles of the type HINTERNET and free any associated resources. The function terminates any pending operations on the handle and discards any outstanding data. If a thread is blocking a call to Wininet.dll, another thread in the application can call InternetCloseHandle on the Internet handle being used by the first thread to cancel the operation and unblock the first thread.

InternetCloseHandle should be used to close the handle returned from

InternetOpen when the application has finished using the Internet DLL.

If there is a status callback registered for the handle being closed and the handle was created with a non-NULL context value, an INTERNET_STATUS_HANDLE_CLOSING callback will be made. This indication will be the last callback made from a handle and indicates that the handle is being destroyed.

If asynchronous requests are pending for the handle or any of its child handles, the handle cannot be closed immediately, but it will be invalidated. Any new requests attempted using the handle will return with an ERROR_INVALID_HANDLE notification. The asynchronous requests will complete with INTERNET_STATUS_REQUEST_COMPLETE. Applications must be prepared to receive any INTERNET_STATUS_REQUEST_COMPLETE indications on the handle before the final INTERNET_STATUS_HANDLE_CLOSING indication is made, which indicates that the handle is completely closed.

An application can call GetLastError to determine if requests are pending. If GetLastError returns ERROR_IO_PENDING, there were outstanding requests when the handle was closed.

See also FtpFindFirstFile, FtpOpenFile, GopherFindFirstFile, HttpOpenRequest, InternetConnect, InternetOpen

InternetCombineUrl

BOOL InternetCombineUrl(

IN LPCTSTR lpszBaseUrl,

IN LPCTSTR lpszRelativeUrl, OUT LPTSTR lpszBuffer,

IN OUT LPDWORD lpdwBufferLength, IN DWORD dwFlags

);

Combines a base and relative URL into a single URL. The resultant URL will be canonicalized (see InternetCanonicalizeUrl).

  • Returns TRUE if successful, or FALSE otherwise. To get extended error information, call GetLastError . Possible error codes include:

ERROR_INVALID_PARAMETER

ERROR_INSUFFICIENT_BUFFER

ERROR_BAD_PATHNAME ERROR_INTERNET_INVALID_URL

Bad string, buffer, buffer size, or flags parameter.

The *lpdwBufferLength parameter, in bytes, of the buffer required to hold the resultant, combined URL.

The URLs could not be combined. The format of the URL is invalid.

lpszBaseUrl

Address of the base URL to be combined.

lpszRelativeUrl

Address of the relative URL to be combined.

lpszBuffer

Address of a buffer that receives the resulting URL.

lpdwBufferLength

Size, in bytes, of the lpszBuffer buffer. If the function succeeds, this parameter receives the length, in characters, of the resultant combined URL 梩 he length does not include the null terminator. If the function fails, this parameter receives the length, in bytes, of the required buffer梩he length includes the null terminator.

dwFlags

Flags controlling the operation of the function. For a description of the flags, see InternetCanonicalizeUrl .

InternetConnect

HINTERNET InternetConnect(

IN HINTERNET hInternetSession, IN LPCTSTR lpszServerName,

IN INTERNET_PORT nServerPort,

IN LPCTSTR lpszUsername OPTIONAL, IN LPCTSTR lpszPassword OPTIONAL, IN DWORD dwService,

IN DWORD dwFlags, IN DWORD dwContext

);

Opens an FTP, Gopher, or HTTP session for a given site.

  • Returns a valid handle to the FTP, Gopher, or HTTP session if the connection is successful, or NULL otherwise. To get extended error information, call GetLastError . An application can also use InternetGetLastResponseInfo to determine why access to the service was denied.
hInternetSession

Handle of the current Internet session. The handle must have been returned by a previous call to InternetOpen .

lpszServerName

Address of a null-terminated string that contains the host name of an Internet server. Alternately, the string can contain the IP number of the site in ASCII dotted-decimal format (for example, 11.0.1.45).

nServerPort

Number of the TCP/IP port on the server to connect to. Can be one of the values in the following list. If this parameter is set to INTERNET_INVALID_PORT_NUMBER, the function uses the default port for the specified service. These values do not cause the function to use this

protocol. The value sets the port to be used. A flag must be used to set the service.

Value

Meaning

INTERNET_DEFAULT_FTP_PORT

Use the servers

default port (port 21). for

FTP

INTERNET_DEFAULT_GOPHER_POR T

Use the servers

default port (port 70). for

Gopher

INTERNET_DEFAULT_HTTP_PORT

Use the servers

default port (port 80). for

HTTP

INTERNET_DEFAULT_HTTPS_PORT

Use the servers

default port (port 443). for

HTTPS

lpszUsername

Address of a null-terminated string that contains the name of the user to log on. If this parameter is NULL, the function uses an appropriate default, except for HTTP. A NULL parameter in HTTP causes the server to return an error. For the FTP protocol, the default is anonymous.

lpszPassword

Address of a null-terminated string that contains the password to use to log on. If both lpszPassword and lpszUsername are NULL, the function uses the default anonymous password. In the case of FTP, the default anonymous password is the user's e-mail name. If lpszPassword is NULL, but lpszUsername is not NULL, the function uses a blank password. The following table describes the behavior for the four possible settings of lpszUsername and lpszPassword:

lpszUsername lpszPasswor

d

User name sent to FTP server

Password sent to FTP server

NULL NULL "anonymous" User's e-mail name

Non-NULL string NULL lpszUsername ""

NULL Non-NULL

string

Non-NULL string Non-NULL

string

ERROR ERROR

lpszUsername lpszPassword

dwService

Type of service to access. Can be one of these values:

Value Meaning

INTERNET_SERVICE_FTP FTP service.

INTERNET_SERVICE_GOPHER Gopher service. INTERNET_SERVICE_HTTP HTTP service.

dwFlags

Flags specific to the service used. Can be one of these values: If dwService is: dwFlags supported

INTERNET_SERVICE_FTP INTERNET_CONNECT_FLAG_PASSIVE

(Use passive mode in all data connections for this FTP session.)

dwContext

An application-defined value that is used to identify the application context for the returned handle in callbacks.

The InternetConnect function is required before communicating with any Internet service.

Having a connect function for all protocols, even those that do not use persistent connections, lets an application communicate common information about several requests using a single function call. In addition, this allows for future versions of Internet protocols that do not require a connection to be established for every client request.

For FTP sites, InternetConnect actually establishes a connection with the server; for others, such as Gopher, the actual connection is not established until the application requests a specific transaction.

For maximum efficiency, applications using the Gopher and HTTP protocols should try to minimize calls to InternetConnect and avoid calling this function for every transaction requested by the user. One way to accomplish this is to keep a small cache of handles returned from InternetConnect; when the user makes a request to a previously accessed server, that session handle is still available.

An application that needs to display multiline text information sent by an FTP server can use InternetGetLastResponseInfo to retrieve the text.

For FTP connections, if lpszUsername is NULL, InternetConnect sends the string "anonymous" as the user name. If lpszPassword is NULL, InternetConnect attempts to use the user's e-mail name as the password.

To close the handle returned from InternetConnect, the application should call InternetCloseHandle. This function disconnects the client from the server and frees all resources associated with the connection.

See also InternetCloseHandle, InternetOpen

InternetConfirmZoneCrossing

DWORD InternetConfirmZoneCrossing( IN HWND hWnd,

IN LPSTR szUrlPrev, IN LPSTR szUrlNew, IN BOOL bPost

);

Checks for changes between secure and non-secure URLs. When a change occurs in security between two URLs, an application should allow the user to acknowledge this change, typically by displaying a dialog box.

  • Returns ERROR_SUCCESS if the user confirmed that it was okay to continue or there was no user input needed, ERROR_CANCELLED if the user canceled, or ERROR_NOT_ENOUGH_MEMORY if there is not enough memory to carry out the request.
hWnd

Handle of the parent window for any needed dialog box.

szUrlPrev

URL that was viewed before the current request was made.

szUrlNew

New URL that the user has requested to view.

bPost

TRUE if a post is being made in this request. This flag is ignored in this release.

InternetCrackUrl

BOOL InternetCrackUrl( IN LPCSTR lpszUrl,

IN DWORD dwUrlLength, IN DWORD dwFlags,

IN OUT LPURL_COMPONENTS lpUrlComponents

);

Cracks a URL into its component parts.

  • Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError .
lpszUrl

Address of a string that contains the canonical URL to crack.

dwUrlLength

Length of the lpszUrl string, or zero if lpszUrl is an ASCIIZ string.

dwFlags

Flags controlling the operation. Can be one of these values:

ICU_ESCAPE Convert unsafe characters in the URL-path component to escape sequences.

ICU_DECODE Convert encoded characters back to their normal form. This can be used only if the user provides buffers to copy the components into.

ICU_USERNAME Not currently implemented.

lpUrlComponents

Address of a URL_COMPONENTS structure that receives the URL components.

The required components are indicated by members of the URL_COMPONENTS structure. Each component has a pointer to the value, and has a member that stores the length of the stored value. If both the value and the length for a component are equal to zero, that component is not returned. If the pointer to the value of the component is NULL and the value of its

corresponding length member is non-zero, the address of the first character of the corresponding component in the lpszUrl string is stored in

the pointer, and the length of the component is stored in the length member. Otherwise, the pointer contains the address of the user-supplied buffer where the component is copied, and the length member is updated with the length of the copied component, minus 1 for the trailing string terminator.

See also FtpOpenFile, InternetCloseHandle, InternetFindNextFile, InternetSetStatusCallback

InternetCreateUrl

BOOL

IN LPURL_COMPONENTS lpUrlComponents, IN DWORD dwFlags,

OUT LPSTR lpszUrl,

IN OUT LPDWORD lpdwUrlLength

);

Creates a URL from its component parts.

  • Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError . If the function finds no matching files, GetLastError returns ERROR_NO_MORE_FILES.
lpUrlComponents

Address of a URL_COMPONENTS structure that contains the components from which to create the URL.

dwFlags

Flags that control the operation of this function. Can be a combination of these values:

Value Meaning

ICU_ESCAPE Convert unsafe characters in the URL-path component to escape sequences.

ICU_USERNAME When adding the user name, use the name that was specified at login time.

lpszUrl

Address of a buffer that receives the URL.

lpdwUrlLength

Length, in bytes, of the lpszUrl buffer. When the function returns, this parameter receives the length, in bytes, of the URL string, minus 1 for the terminating character. If GetLastError returns ERROR_INSUFFICIENT_BUFFER, this parameter receives the number of bytes required to hold the created URL.

InternetErrorDlg

DWORD InternetErrorDlg(

IN HWND hWnd,

IN OUT HINTERNET hInternet, IN DWORD dwError,

IN DWORD dwFlags,

IN OUT LPVOID *lppvData

);

Displays a dialog box that explains why an error occurred with an HttpSendRequest Win32 Internet function. An application can call this function for several different error codes, and can do bookkeeping based on the user's response to the dialog box.

  • Returns ERROR_SUCCESS, ERROR_CANCELLED, or ERROR_INTERNET_FORCE_RETRY.
hWnd

Handle of the parent window for any needed dialog box. This parameter can be NULL if no dialog box is needed.

hInternet

Handle of the Internet connection used in the call to HttpSendRequest .

dwError

Error value for which to display a dialog box. Can be one of these values:

ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR

Notifies the user of the zone crossing to and from a secure site.

ERROR_INTERNET_INCORRECT_PASSWORD

Displays a dialog box for obtaining the user's name and password. (On Windows 95, the function attempts to use the network caching user interface and disk cache.)

ERROR_INTERNET_INVALID_CA

Notifies the user that the Win32 Internet function does not have a certificate for this SSL site.

ERROR_INTERNET_POST_IS_NON_SECURE

Displays a warning about posting data to the server through a non-secure connection.

ERROR_INTERNET_SEC_CERT_CN_INVALID

Displays an Invalid SSL Common Name dialog box, and lets the user view the incorrect certificate. Also allows the user to select a certificate in response to a server request.

ERROR_INTERNET_SEC_CERT_DATE_INVALID

Tells the user that the SSL certificate has expired.

dwFlags

Action flags. Can be a combination of these values: FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS

If the function succeeds, store the results of the

dialog box in the Internet handle.

FLAGS_ERROR_UI_FLAGS_GENERATE_DATA

Query the Internet handle for needed information. The function constructs the appropriate data structure for the error. (For example, for Cert CN failures, the function will grab the certificate.)

FLAGS_ERROR_UI_FILTER_FOR_ERRORS

Scan the returned headers for errors. Call after every HttpSendRequest . The function detects any hidden errors, such as an authentication error.

lppvData

Address of a yet-to-be-defined structure. The structure may be different for each error that needs to be handled

InternetFindNextFile

BOOL InternetFindNextFile( IN HINTERNET hFind,

OUT LPVOID lpvFindData

);

Continues a file search started as a result of a previous call to

FtpFindFirstFile or GopherFindFirstFile.

  • Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError . If the function finds no matching files, GetLastError returns ERROR_NO_MORE_FILES.
hFind

Valid handle returned from either FtpFindFirstFile or

GopherFindFirstFile .

lpvFindData

Address of the buffer that receives information about the found file or directory. The format of the information placed in the buffer depends on the protocol in use. The FTP protocol returns a WIN32_FIND_DATA structure, and the Gopher protocol returns a GOPHER_FIND_DATA structure.

See also FtpFindFirstFile, GopherFindFirstFile

InternetGetLastResponseInfo

BOOL InternetGetLastResponseInfo( OUT LPDWORD lpdwError,

OUT LPTSTR lpszBuffer OPTIONAL, IN OUT LPDWORD lpdwBufferLength

);

Retrieves the last Win32 Internet function error description or server response on the thread calling this API.

  • Returns TRUE if error text was successfully written to the buffer, or FALSE otherwise. To get extended error information, call GetLastError . If the buffer is too small to hold all the error text, GetLastError returns ERROR_INSUFFICIENT_BUFFER, and the lpdwBufferLength parameter contains the minimum buffer size required to return all the error text.
lpdwError

Address of a variable that receives an error code pertaining to the operation that failed.

lpszBuffer

Address of a buffer that receives the error text.

lpdwBufferLength

Size of the lpszBuffer buffer. When the function returns, this parameter contains the size of the string written to the buffer.

The FTP and Gopher protocols can return additional text information along with most errors. This extended error information can be retrieved by using the InternetGetLastResponseInfo function whenever GetLastError returns ERROR_INTERNET_EXTENDED_ERROR (occurring after an unsuccessful function call).

The buffer pointed to by lpszBuffer must be large enough to hold both the error string and a zero terminator at the end of the string. However, note that the value returned in lpdwBufferLength does not include the terminating zero.

InternetGetLastResponseInfo can be called multiple times until another Win32 Internet function API is called on this thread. When another API is called, the internal buffer that is storing the last response information is cleared.

InternetOpen

HINTERNET InternetOpen( IN LPCTSTR lpszAgent,

IN DWORD dwAccessType,

IN LPCTSTR lpszProxyName OPTIONAL, IN LPCSTR lpszProxyBypass OPTIONAL, IN DWORD dwFlags

);

Initializes an application's use of the Win32 Internet functions.

  • Returns a valid handle that the application passes on to subsequent Win32 Internet functions. If InternetOpen fails, it returns NULL. To get a specific error code, call GetLastError .
lpszAgent

Address of a string that contains the name of the application or entity calling the Internet functions (for example, Microsoft Internet

Explorer). This name is used as the user agent in the HTTP protocol.

dwAccessType

Type of access required. Can be one of these values: INTERNET_OPEN_TYPE_DIRECT

Resolve all host names locally.

INTERNET_OPEN_TYPE_PROXY

Pass requests to the proxy unless a proxy bypass list is supplied and the name to be resolved bypasses the proxy. In this case, the function proceeds as for INTERNET_OPEN_TYPE_DIRECT.

INTERNET_OPEN_TYPE_PRECONFIG

Retrieve the proxy or direct configuration from the registry.

lpszProxyName

Address of a string that contains the name of the proxy server (or servers) to use if proxy access was specified. If this parameter is NULL, the function reads proxy information from the registry. For more information about this parameter, see the comments below.

lpszProxyBypass

Address of an optional list of host names or IP addresses, or both, that are known locally. Requests to these names are not routed through the proxy. The list can contain wildcards, such as "157.55.* *int*", meaning any IP address starting with 157.55, or any name containing the substring "int", will bypass the proxy.

If this parameter specifies the "<local>" macro as the only entry, the function bypasses any host name that does not contain a period. For example, "www.microsoft.com" would be routed to the proxy, whereas "internet" would not.

If this parameter is NULL, the function reads the bypass list from the registry.

dwFlags

Flag that indicates various options affecting the behavior of the function. Can be a combination of these values:

INTERNET_FLAG_OFFLINE

Satisfy download operations on this handle through the persistent cache only. If the item does not exist in the cache, the function returns an appropriate error code.

INTERNET_FLAG_ASYNC

Future operations on this handle may fail with ERROR_IO_PENDING. A status callback will be made with INTERNET_STATUS_REQUEST_COMPLETE. This callback will be on a thread other than the one for the original request. A status callback routine must be registered or the functions will be completed synchronously.

This function is the first Win32 Internet function called by an application. It tells the Internet DLL to initialize internal data structures and prepare for future calls from the application. When the

application finishes using the Internet functions, it should call

InternetCloseHandle to free the handle and any associated resources.

If dwFlags includes INTERNET_FLAG_ASYNC, all handles derived from this handle will have asynchronous behavior as long as a status callback routine is registered. For a function to be completed synchronously, dwContext must be set to zero for that call.

By default, the function assumes that the proxy specified by lpszProxyName is a CERN proxy. For example, "proxy" defaults to a CERN proxy called "proxy" that listens at port 80 (decimal). An application can specify more than one proxy, including different proxies for the different protocols.

For example, if you specify "ftp=ftp://ftp-gw gopher=http://jericho:99 proxy", FTP requests are made through the FTP proxy "ftp-gw", which listens at port 21 (default for FTP), and Gopher requests are made through a CERN proxy called "jericho", which listens at port 99. All other requests (for example, HTTP requests) are made through the CERN proxy called "proxy", which listens at port 80. Note that if the application is only using FTP, for example, it would not need to specify "ftp=ftp://ftp-gw:21". It could specify just "ftp-gw". An application must specify the protocol names only if it will be using more than one protocol per handle returned by InternetOpen.

The application can make any number of calls to InternetOpen, although a single call is normally sufficient. The application may need to have separate behaviors defined for each InternetOpen instance, such as different proxy servers configured for each.

See also InternetCloseHandle

InternetOpenUrl

HINTERNET InternetOpenUrl(

IN HINTERNET hInternetSession, IN LPCTSTR lpszUrl,

IN LPCTSTR lpszHeaders OPTIONAL, IN DWORD dwHeadersLength,

IN DWORD dwFlags, IN DWORD dwContext

);

Begins reading a complete FTP, Gopher, or HTTP Universal Resource Locator (URL). Use InternetCanonicalizeUrl first if the URL being used contains a relative URL and a base URL separated by blank spaces.

  • Returns a valid handle to the FTP, Gopher, or HTTP URL if the connection is successfully established, or NULL if the connection fails. To get a specific error code, call GetLastError . To determine why access to the service was denied, call InternetGetLastResponseInfo .
hInternetSession

Handle of the current Internet session. The handle must have been returned by a previous call to InternetOpen .

lpszUrl

Address of a string that contains the URL to begin reading. Only URLs beginning with ftp:, gopher:, http:, or https: are supported.

lpszHeaders

Address of a string that contains the headers to be sent to the HTTP server. (For more information, see the description of the lpszHeaders parameter to HttpSendRequest .)

dwHeadersLength

Length, in characters, of the additional headers. If this parameter is

  • 1L and lpszHeaders is not NULL, lpszHeaders is assumed to be zero- terminated (ASCIIZ) and the length is calculated.
dwFlags

Action flags. Can be one of these values: INTERNET_FLAG_RELOAD

Get the data from the wire even if it is locally

cached.

INTERNET_FLAG_DONT_CACHE

Do not cache the data, either locally or in any gateways.

INTERNET_FLAG_RAW_DATA

Return raw data (WIN32_FIND_DATA structures for FTP, and GOPHER_FIND_DATA structures for Gopher). If this flag is not specified, InternetOpenUrl returns HTML formatted for directories.

INTERNET_FLAG_SECURE

Request secure transactions on the wire with Secure Sockets Layer or PCT. This flag applies to HTTP requests only.

INTERNET_FLAG_EXISTING_CONNECT

If possible, reuse the existing connections to the server for new requests generated by InternetOpenUrl instead of creating a new session for each request.

dwContext

An application-defined value that is passed, along with the returned handle, to any callback functions.

This is a general function that an application can use to retrieve data over any of the protocols that the Win32 Internet functions support. This function is particularly useful when the application does not need to access the particulars of a protocol, but only requires the data corresponding to a URL. The InternetOpenUrl function parses the URL string, establishes a connection to the server, and prepares to download the data identified by the URL. The application can then use InternetReadFile to retrieve the URL data. It is not necessary to call InternetConnect before InternetOpenUrl.

InternetOpenUrl disables Gopher on ports less than 1024, except for port

70 (the standard Gopher port) and port 105 (typically used for Central Services Organization [CSO] name searches).

Use InternetCloseHandle to close the handle returned from InternetOpenUrl. However, note that closing the handle before all the URL data has been read results in the connection being terminated.

See also HttpSendRequest, InternetCloseHandle, InternetOpen, InternetReadFile

InternetQueryDataAvailable

BOOL

IN HINTERNET hFile,

OUT LPDWORD lpdwNumberOfBytesAvailable, IN DWORD dwFlags,

IN DWORD dwContext

);

Queries the amount of data available.

  • Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError . If the function finds no matching files, the GetLastError function returns ERROR_NO_MORE_FILES.
hFile

Valid Internet file handle, as returned by FtpOpenFile , GopherOpenFile , or HttpOpenRequest .

lpdwNumberOfBytesAvailable

Address of a variable that receives the number of available bytes.

dwFlags

Reserved; must be zero.

dwContext

Reserved; must be zero.

This function returns the number of bytes of data that are available to be read immediately by a subsequent call to InternetReadFile. If there is currently no data available and the end of the file has not been reached, the request waits until data becomes available. The amount of data remaining will not be recalculated until all of the available data indicated by the call to InternetQueryDataAvailable is read.

See also FtpFindFirstFile, GopherFindFirstFile

InternetQueryOption

BOOL InternetQueryOption(

IN HINTERNET hInternet OPTIONAL,

IN DWORD dwOption,

OUT LPVOID lpBuffer OPTIONAL,

IN OUT LPDWORD lpdwBufferLength

);

Queries an Internet option on the specified handle.

  • Returns TRUE if successful, or FALSE otherwise. To get a specific error code, call GetLastError .
hInternet

Internet handle on which to query information.

dwOption

Internet option to query. Can be one of these values: INTERNET_OPTION_CALLBACK

Returns the address of the callback function defined

for this handle.

INTERNET_OPTION_CONNECT_TIMEOUT

Returns the time-out value in milliseconds to use for Internet connection requests. If a connection request takes longer than this time-out value, the request is canceled. The default time-out value is infinite.

INTERNET_OPTION_CONNECT_RETRIES

Returns the retry count to use for Internet connection requests. If a connection attempt still fails after the specified number of tries, the request is canceled. The default is five retries.

INTERNET_OPTION_CONNECT_BACKOFF

Returns the delay value, in milliseconds, to wait between connection retries. (This flag is currently not implemented.)

INTERNET_OPTION_CONTROL_SEND_TIMEOUT

Returns the time-out value, in milliseconds, to use for non-data (control) Internet send requests. If a non-data send request takes longer than this time-out, the request is canceled. The default time-out is infinite. Currently, this value has meaning only for FTP sessions.

INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT

Returns the time-out value, in milliseconds, to use for non-data (control) Internet receive requests. If a non-data receive request takes longer than this time- out value, the request is canceled. The default time- out is infinite. Currently, this value has meaning only for FTP sessions.

INTERNET_OPTION_DATA_SEND_TIMEOUT

Returns the time-out value, in milliseconds, to use for Internet data send requests. If a data send request takes longer than this time-out value, the request is canceled. The default time-out value is infinite.

INTERNET_OPTION_DATA_RECEIVE_TIMEOUT

Returns the time-out value, in milliseconds, to use for Internet data receive requests. If a data receive request takes longer than this time-out value, the request is canceled. The default time-out value is

infinite.

INTERNET_OPTION_HANDLE_TYPE

Returns the type of the Internet handle passed in. Possible return values include:

INTERNET_HANDLE_TYPE_INTE RNET

INTERNET_HANDLE_TYPE_CONN ECT_FTP

INTERNET_HANDLE_TYPE_CONN ECT_GOPHER

INTERNET_HANDLE_TYPE_CONN ECT_HTTP

INTERNET_HANDLE_TYPE_FTP_ FIND

INTERNET_HANDLE_TYPE_FTP_ FIND_HTML

INTERNET_HANDLE_TYPE_FTP_ FILE

INTERNET_HANDLE_TYPE_FTP_ FILE_HTML

INTERNET_HANDLE_TYPE_GOPH ER_FIND

INTERNET_HANDLE_TYPE_GOPH ER_FIND_HTML

INTERNET_HANDLE_TYPE_GOPH ER_FILE

INTERNET_HANDLE_TYPE_GOPH ER_FILE_HTML

INTERNET_HANDLE_TYPE_HTTP

_REQUEST

INTERNET_OPTION_CONTEXT_VALUE

Returns the context value associated with this Internet handle.

INTERNET_OPTION_READ_BUFFER_SIZE

Returns the size of the read buffer (for example, the buffer used by FtpGetFile ).

INTERNET_OPTION_WRITE_BUFFER_SIZE

Returns the size of the write buffer (for example, the buffer used by FtpPutFile ).

INTERNET_OPTION_ASYNC_PRIORITY

Returns the priority of this download if it is an asynchronous download.

INTERNET_OPTION_PARENT_HANDLE

Returns the parent handle of this handle.

INTERNET_OPTION_KEEP_CONNECTION

Returns an indication whether this handle uses

persistent connections. Can be one of these values:

INTERNET_KEEP_ALIVE_UNKNO WN

INTERNET_KEEP_ALIVE_ENABL ED

INTERNET_KEEP_ALIVE_DISAB LED

INTERNET_OPTION_USERNAME

Returns the user name associated with a handle returned by InternetConnect .

INTERNET_OPTION_PASSWORD

Returns the password associated with the handle returned by InternetConnect .

INTERNET_OPTION_REQUEST_FLAGS

Returns special status flags about the current download in progress. The only flag that is returned at this time is INTERNET_REQFLAG_FROM_CACHE. This is the way for the caller to find out whether a request is being satisfied from the cache.

INTERNET_OPTION_EXTENDED_ERROR

Returns the Windows Sockets error code that was mapped to the ERROR_INTERNET_ error codes last returned in this thread context.

INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT

Returns the certificate for an SSL/PCT server into the

INTERNET_CERTIFICATE_INFO structure.

INTERNET_OPTION_SECURITY_CERTIFICATE

Returns the certificate for an SSL/PCT server into a formatted string.

INTERNET_OPTION_SECURITY_KEY_BITNESS

Returns the bit size of the encryption key. The larger the number, the greater the encryption strength being used.

INTERNET_OPTION_OFFLINE_MODE

Not currently implemented. INTERNET_OPTION_CACHE_STREAM_HANDLE

Returns the file handle being used to write the cached data.

INTERNET_OPTION_ASYNC

Not currently implemented.

INTERNET_OPTION_SECURITY_FLAGS

Returns the security flags for a handle. Can be a combination of these values:

SECURITY_FLAG_128BIT SECURITY_FLAG_40BIT

SECURITY_FLAG_56BIT SECURITY_FLAG_IETFSSL4 SECURITY_FLAG_IGNORE_CERT

_CN_INVALID

SECURITY_FLAG_IGNORE_CERT

_DATE_INVALID

SECURITY_FLAG_IGNORE_REDI RECT_TO_HTTP

SECURITY_FLAG_IGNORE_REDI RECT_TO_HTTPS

SECURITY_FLAG_NORMALBITNE SS

SECURITY_FLAG_PCT SECURITY_FLAG_PCT4 SECURITY_FLAG_SECURE SECURITY_FLAG_SSL SECURITY_FLAG_SSL3 SECURITY_FLAG_UNKNOWNBIT

INTERNET_OPTION_DATAFILE_NAME

Returns the name of the file backing a downloaded entity.

INTERNET_OPTION_URL

Returns the full URL of a downloaded entity.

INTERNET_OPTION_REFRESH

Returns TRUE if variables are allowed to be re-read from the registry for a handle.

INTERNET_OPTION_PROXY

Returns the proxy information on an existing InternetOpen handle when the process handle is not NULL. If the process handle is NULL, the API sets or queries the global proxy information. The lpBuffer parameter is an INTERNET_PROXY_INFO structure that contains the proxy information.

INTERNET_OPTION_VERSION

Returns the version number of Wininet.dll. The lpBuffer parameter is the address of an INTERNET_VERSION_INFO structure.

INTERNET_OPTION_USER_AGENT

Returns the user agent string on handles supplied by InternetOpen and used in a subsequent HttpSendRequest , so long as it is not overridden by a header added by HttpAddRequestHeaders or HttpSendRequest .

lpBuffer

Address of a buffer that receives the option setting.

lpdwBufferLength

Address of a variable that contains the length of lpBuffer. When the function returns, this parameter receives the length of the data placed into lpBuffer. If GetLastError returns ERROR_INSUFFICIENT_BUFFER, this parameter receives the number of bytes required to hold the created URL.

See also FtpGetFile, FtpPutFile, InternetConnect, InternetOpen, InternetSetOption

InternetReadFile

BOOL InternetReadFile( IN HINTERNET hFile,

IN LPVOID lpBuffer,

IN DWORD dwNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead

);

Reads data from a handle opened by the InternetOpenUrl, FtpOpenFile, GopherOpenFile, or HttpOpenRequest function.

  • Returns TRUE if successful or FALSE otherwise. To get extended error information, call GetLastError . An application can also use InternetGetLastResponseInfo when necessary.
hFile

Valid handle returned from a previous call to InternetOpenUrl , FtpOpenFile , GopherOpenFile , or HttpOpenRequest .

lpBuffer

Address of a buffer that receives the data read.

dwNumberOfBytesToRead

Number of bytes to read.

lpNumberOfBytesRead

Address of a variable that receives the number of bytes read. The InternetReadFile function sets this value to zero before doing any work or error checking.

If the return value is TRUE and the number of bytes read is zero, the transfer has been completed and there are no more bytes to read on the handle. This is analogous to reaching EOF in a local file. Call InternetCloseHandle to free up the connection to the server.

The buffer pointed to by lpBuffer is not always filled by calls to InternetReadFile (sufficient data may not have arrived from the server). When reading HTML data, for the first read posted, the buffer must be large enough to hold the HTML headers. When reading HTML-encoded directory entries, the buffer must be large enough to hold at least one complete entry.

When the item being read is also being cached by a Win32 Internet function, the application must ensure that a read is made for end-of-file so the cache file is committed correctly.

This function always fulfills the user's request. If more data is requested than is available, the function waits until enough data to complete the request is available. The only time that less data is returned than requested is when the end of the file has been reached.

This function can also be used to retrieve FTP and Gopher directory listings as an HTML document on a handle opened by InternetOpenUrl. The INTERNET_FLAG_RAW_DATA value must not have been specified in the call to InternetOpenUrl.

See also FtpOpenFile, GopherOpenFile, HttpOpenRequest, InternetCloseHandle, InternetOpenUrl

InternetSetFilePointer

BOOL InternetSetFilePointer( IN HINTERNET hFile,

IN LONG IDistanceToMove, IN PVOID pReserved,

IN DWORD dwMoveMethod, IN DWORD dwContext

);

Sets a file position for InternetReadFile. This is a synchronous call; however, subsequent calls to InternetReadFile may block or return pending if the data is not available from the cache and the server does not support random access.

  • Returns the current file position if the function succeeds, or -1 otherwise.
hFile

Valid handle returned from a previous call to FtpOpenFile , GopherOpenFile , InternetOpenUrl on an HTTP URL, or to HttpOpenRequest (using the GET or HEAD method and passed to HttpSendRequest ). This handle must not have been created with the INTERNET_FLAG_DONT_CACHE or INTERNET_FLAG_NO_CACHE_WRITE value set.

IDistanceToMove

Number of bytes to move the file pointer. A positive value moves the pointer forward in the file, and a negative value moves it backward.

pReserved

Reserved; must be NULL.

dwMoveMethod

Starting point for the file pointer move. Can be one of these values:

FILE_BEGIN The starting point is zero or the beginning of the file. If FILE_BEGIN is specified, lDistanceToMove is interpreted as an unsigned location for the new file pointer.

FILE_CURRENT The current value of the file pointer is the starting point.

FILE_END The current end-of-file position is the starting point. This method fails if the content length is unknown.

dwContext

Reserved; must be zero.

See also FtpOpenFile, GopherOpenFile, HttpOpenRequest, HttpSendRequest, InternetOpenUrl, InternetReadFile

InternetSetOption

BOOL InternetSetOption(

IN HINTERNET hInternet OPTIONAL,

IN DWORD dwOption, IN LPVOID lpBuffer,

IN DWORD dwBufferLength

);

Sets an Internet option on the specified handle.

  • Returns TRUE if successful, or FALSE otherwise. To get a specific error code, call GetLastError .
hInternet

Internet handle on which to set information.

dwOption

Internet option to set. Can be a combination of these values: INTERNET_OPTION_CALLBACK

Sets the address of the callback function defined for

this handle.

INTERNET_OPTION_CONNECT_TIMEOUT

Sets the time-out value, in milliseconds, to use for Internet connection requests. If a connection request takes longer than this time-out value, the request is canceled. The default time-out value is infinite.

INTERNET_OPTION_CONNECT_RETRIES

Sets the retry count to use for Internet connection requests. If a connection attempt still fails after the specified number of tries, the request is canceled. The default is five retries.

INTERNET_OPTION_CONNECT_BACKOFF

Sets the delay value, in milliseconds, to wait between connection retries.

INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT

Sets the time-out value, in milliseconds, to use for non-data (control) Internet receive requests. If a non-data receive request takes longer than this time- out value, the request is canceled. The default time- out is infinite. Currently, this value has meaning

only for FTP sessions.

INTERNET_OPTION_CONTROL_SEND_TIMEOUT

Sets the time-out value, in milliseconds, to use for non-data (control) Internet send requests. If a non- data send request takes longer than this time-out value, the request is canceled. The default time-out value is infinite. Currently, this value has meaning only for FTP sessions.

INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT

Sets the time-out value, in milliseconds, to use for non-data (control) Internet receive requests. If a non-data receive request takes longer than this time- out value, the request is canceled. The default time- out value is infinite. Currently, this value has meaning only for FTP sessions.

INTERNET_OPTION_DATA_SEND_TIMEOUT

Sets the time-out value, in milliseconds, to use for data Internet send requests. If a data send request takes longer than this time-out value, the request is canceled. The default time-out value is infinite.

INTERNET_OPTION_DATA_RECEIVE_TIMEOUT

Sets the time-out value, in milliseconds, to use for data Internet receive requests. If a data receive request takes longer than this time-out value, the request is canceled. The default time-out value is infinite.

INTERNET_OPTION_ASYNC_PRIORITY

Sets the priority of this download if it is an asynchronous download. This option has not been implemented.

INTERNET_OPTION_CONTEXT_VALUE

Sets the context value associated with this Internet handle. Currently, this sets the context value to the address stored in the pointer, DWORD(lpBuffer). For Internet Explorer 4.0, this will be corrected so that the value stored in the buffer will be used, and this flag will be reassigned a new value. The old value, 10, will be preserved so that applications that are written for the old behavior will still be supported.

INTERNET_OPTION_REFRESH

Allows variables to be re-read from the registry for a handle.

INTERNET_OPTION_PROXY

Sets the proxy information on an existing InternetOpen handle when the process handle is not NULL. If the process handle is NULL, the API sets or queries the global proxy information. The lpBuffer parameter is an INTERNET_PROXY_INFO structure that contains the proxy information.

INTERNET_OPTION_USER_AGENT

Sets the user agent string on handles supplied by

InternetOpen and used in subsequent

HttpSendRequest functions, as long as it is not overridden by a header added by HttpAddRequestHeaders or HttpSendRequest .

INTERNET_OPTION_USERNAME

Sets the user name associated with a handle returned by InternetConnect .

INTERNET_OPTION_PASSWORD

Sets the password associated with a handle returned by

InternetConnect .

INTERNET_OPTION_READ_BUFFER_SIZE

Sets the size, in bytes, of the buffer to use to read the data.

INTERNET_OPTION_WRITE_BUFFER_SIZE

Sets the size of the write buffer (for example, the buffer used by FtpPutFile ).

INTERNET_OPTION_WRITE_DATA

Sets the size, in bytes, of the buffer to use while writing out the data.

lpBuffer

Address of a buffer that contains the option setting.

dwBufferLength

Length of the lpBuffer buffer.

See also FtpGetFile, FtpPutFile, InternetConnect, InternetOpen, InternetQueryOption

InternetSetOptionEx

BOOL InternetSetOptionEx(

IN HINTERNET hInternet OPTIONAL,

IN DWORD dwOption, IN LPVOID lpBuffer,

IN DWORD dwBufferLength, IN DWORD dwFlags

);

Sets an Internet option on the specified handle.

  • Returns TRUE if successful, or FALSE otherwise. To get a specific error code, call GetLastError .
hInternet

Internet handle on which to set information.

dwOption

Internet option to set. For a list of possible values, see

InternetSetOption .

lpBuffer

Address of a buffer that contains the option setting.

dwBufferLength

Length of the lpBuffer buffer.

dwFlags

Action flags. Can be one of these values:

Value Meaning

ISO_GLOBAL Modify the option globally.

ISO_REGISTRY Write the option to the registry (where applicable).

InternetSetStatusCallback

INTERNET_STATUS_CALLBACK InternetSetStatusCallback( IN HINTERNET hInternet,

IN INTERNET_STATUS_CALLBACK lpfnInternetCallback

);

Sets up a callback function that Win32 Internet functions can call as progress is made during an operation.

  • Returns the previously defined status callback function if successful, NULL if there was no previously defined status callback function, or INTERNET_INVALID_STATUS_CALLBACK if the callback function is not valid.
hInternet

Handle for which the callback is to be set.

lpfnInternetCallback

Address of the callback function to call when progress is made, or to return NULL to remove the existing callback function. For more information about the callback function, see InternetStatusCallback .

Both synchronous and asynchronous functions use the callback function to indicate the progress of the request, such as resolving a name, connecting to a server, and so on. The callback function is required for an asynchronous operation. The asynchronous request will call back to the application with INTERNET_STATUS_REQUEST_COMPLETE to indicate the request has been completed.

A callback function can be set on any handle, and is inherited by derived handles. A callback function can be changed using InternetSetStatusCallback, providing there are no pending requests that need to use the previous callback value. Note, however, that changing the callback function on a handle does not change the callbacks on derived handles, such as that returned by InternetConnect. You must change the callback function at each level.

Many of the Win32 Internet functions perform several operations on the network. Each operation can take time to complete, and each can fail.

It is sometimes desirable to display status information during a long-term operation. You can display status information by setting up an Internet status callback function that cannot be removed as long as any

callbacks or any asynchronous functions are pending.

After initiating InternetSetStatusCallback, it can be accessed from within any Win32 Internet function for monitoring time-intensive network operations.

InternetStatusCallback

VOID InternetStatusCallback( IN HINTERNET hInternet, IN DWORD dwContext,

IN DWORD dwInternetStatus,

IN LPVOID lpvStatusInformation OPTIONAL, IN DWORD dwStatusInformationLength

);

This is a placeholder for the application-defined status callback

  • No return value.
hInternet

Handle for which the callback function is being called.

dwContext

Application-defined context value associated with hInternet

dwInternetStatus

Status code that indicates why the callback function is being called. Can be one of these values:

INTERNET_STATUS_RESOLVING_NAME

Looking up the IP address of the name contained in

lpvStatusInformation. INTERNET_STATUS_NAME_RESOLVED

Successfully found the IP address of the name contained in lpvStatusInformation.

INTERNET_STATUS_CONNECTING_TO_SERVER

Connecting to the socket address (SOCKADDR) pointed to by lpvStatusInformation.

INTERNET_STATUS_CONNECTED_TO_SERVER

Successfully connected to the socket address (SOCKADDR) pointed to by lpvStatusInformation.

INTERNET_STATUS_SENDING_REQUEST

Sending the information request to the server. The

lpvStatusInformation parameter is NULL. INTERNET_STATUS_ REQUEST_SENT

Successfully sent the information request to the server. The lpvStatusInformation parameter points to a DWORD containing the number of bytes sent.

INTERNET_STATUS_RECEIVING_RESPONSE

Waiting for the server to respond to a request. The

lpvStatusInformation parameter is NULL. INTERNET_STATUS_RESPONSE_RECEIVED

Successfully received a response from the server. The lpvStatusInformation parameter points to a DWORD containing the number of bytes received.

INTERNET_STATUS_REDIRECT

Indicates that an HTTP request is about to automatically redirect the request. The lpvStatusInformation parameter points to the new URL. At this point, the application may read any data returned by the server with the redirect response, and may query the response headers. It may also cancel the operation by closing the handle. This callback is not made if the original request specified INTERNET_FLAG_NO_AUTO_REDIRECT.

INTERNET_STATUS_CLOSING_CONNECTION

Closing the connection to the server. The

lpvStatusInformation parameter is NULL. INTERNET_STATUS_CONNECTION_CLOSED

Successfully closed the connection to the server. The

lpvStatusInformation parameter is NULL. INTERNET_STATUS_HANDLE_CREATED

Used by InternetConnect to indicate it has created the new handle. This lets the application call InternetCloseHandle from another thread, if the connect is taking too long.

INTERNET_STATUS_HANDLE_CLOSING

This handle value is now terminated INTERNET_STATUS_REQUEST_COMPLETE

An asynchronous operation has been completed. See

InternetOpen for details on INTERNET_FLAG_ASYNC.

The lpvStatusInformation parameter points to an INTERNET_ASYNC_RESULT structure. The dwStatusInformationLength parameter contains the final completion status of the asynchronous function. If this is ERROR_INTERNET_EXTENDED_ERROR, the application can retrieve the server error information by using InternetGetLastResponseInfo .

lpvStatusInformation

Address of a buffer that contains information pertinent to this call to the callback function.

dwStatusInformationLength

Size of the lpvStatusInformation buffer.

In the case of INTERNET_STATUS_REQUEST_COMPLETE, lpvStatusInformation is the address of an INTERNET_ASYNC_RESULT structure.

An application uses the callback function to indicate the progress of synchronous and asynchronous functions, and to indicate the completion of an asynchronous request.

Because callbacks are made during processing of the request, the application should spend as little time as possible in the callback

function to avoid degrading data throughput on the network. For example,

displaying a dialog box in a callback function may be such a lengthy operation that the server terminates the request.

The callback function may be called in a thread context different from the thread that initiated the request.

See also InternetCloseHandle, InternetConnect, InternetGetLastResponseInfo, InternetOpen

InternetTimeFromSystemTime

BOOL InternetTimeFromSystemTime( IN CONST SYSTEMTIME *pst, IN DWORD dwRFC,

OUT LPSTR lpszTime, IN DWORD cbTime

);

Formats a date and time according to the specified RFC format (as specified in the HTTP version 1.0 specification).

  • Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError .
pst

Address of a SYSTEMTIME structure that contains the date and time to format.

dwRFC

RFC format.

lpszTime

Address of a buffer that receives the formatted data and time.

cbTime

Size, in bytes, of the lpszTime buffer.

InternetTimeToSystemTime

BOOL InternetTimeToSystemTime( IN LPCSTR lpszTime,

OUT SYSTEMTIME *pst,

IN DWORD dwReserved

);

Takes an HTTP time/date string and converts it to a SYSTEMTIME structure.

  • Returns TRUE if the string was converted, or FALSE otherwise. To get extended error information, call GetLastError .
lpszTime

Pointer to a null-terminated date/time string to convert

pst

Address of the pointer to the converted time.

dwReserved

Reserved; must be zero.

InternetWriteFile

BOOL InternetWriteFile( IN HINTERNET hFile,

IN LPCVOID lpBuffer,

IN DWORD dwNumberOfBytesToWrite,

OUT LPDWORD lpdwNumberOfBytesWritten

);

Writes data to an open Internet file.

  • Returns TRUE if the function succeeds, or FALSE otherwise. To get extended error information, call GetLastError . An application can also use InternetGetLastResponseInfo , when necessary.
hFile

Valid handle returned from a previous call to FtpOpenFile .

lpBuffer

Address of a buffer that contains the data to be written to the file.

dwNumberOfBytesToWrite

Number of bytes to write to the file.

lpdwNumberOfBytesWritten

Address of a variable that receives the number of bytes written to the buffer. The InternetWriteFile function sets this value to zero before doing any work or error checking.

When the application is sending data, it must call InternetCloseHandle

to end the data transfer.

See also FtpOpenFile, InternetCloseHandle