TP Functions
The HTTP functions control the transmission and content of HTTP requests.
HttpAddRequestHeaders
BOOL HttpAddRequestHeaders(
IN HINTERNET hHttpRequest, IN LPCTSTR lpszHeaders,
IN DWORD dwHeadersLength, IN DWORD dwModifiers
);
Adds one or more HTTP request headers to the HTTP request handle.
- Returns TRUE if successful, or FALSE otherwise. To get extended error information, call GetLastError .
hHttpRequest
Open HTTP request handle returned by HttpOpenRequest .
lpszHeaders
Headers to append to the request. Each header must be terminated by a CR/LF (carriage return/line feed) pair.
dwHeadersLength
Length, in characters, of lpszHeaders. If this parameter is -1L, the function assumes that lpszHeaders is zero-terminated (ASCIIZ), and the length is computed.
dwModifiers
Values used to modify the semantics of this function. Can be a combination of these values:
HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
Coalesces headers of the same name. For example, adding "Accept: text/*" followed by "Accept: audio/*" with this flag results in the formation of the single header "Accept: text/*, audio/*". This causes the first header found to be coalesced. It is up to the calling application to ensure a cohesive scheme with respect to coalesced/separate headers.
HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON
Coaleses headers of the same name using a semicolon.
HTTP_ADDREQ_FLAG_COALESCE
Coaleses headers of the same name.
HTTP_ADDREQ_FLAG_REPLACE
Replaces or removes a header. If the header value is empty and the header is found, it is removed. If not empty, the header value is replaced.
HTTP_ADDREQ_FLAG_ADD
Adds the header if it does not exist. Used with REPLACE.
HTTP_ADDREQ_FLAG_ADD_IF_NEW
Adds the header only if it does not already exist; otherwise, an error is returned.
This function appends additional, free-format headers to the HTTP request handle and is intended for use by sophisticated clients that need detailed control over the exact request sent to the HTTP server.
Note that for basic HttpAddRequestHeaders, the application can pass in multiple headers in a single buffer. If the application is trying to remove or replace a header, only one header can be supplied in lpszHeaders.
See also HttpOpenRequest, HttpSendRequest
HttpOpenRequest
HINTERNET HttpOpenRequest(
IN HINTERNET hHttpSession, IN LPCTSTR lpszVerb,
IN LPCTSTR lpszObjectName, IN LPCTSTR lpszVersion,
IN LPCTSTR lpszReferer OPTIONAL,
IN LPCTSTR FAR * lpszAcceptTypes OPTIONAL, IN DWORD dwFlags,
IN DWORD dwContext
);
Opens an HTTP request handle.
- Returns a valid (non-NULL) HTTP request handle if successful, or NULL otherwise. To get extended error information, call GetLastError .
hHttpSession
Handle to an HTTP session returned by InternetConnect .
lpszVerb
Address of a string that contains the verb to use in the request. If this parameter is NULL, the function uses "GET" as the verb.
lpszObjectName
Address of a string that contains the name of the target object of the specified verb. This is generally a file name, an executable module, or a search specifier.
lpszVersion
Address of a string that contains the HTTP version. If this parameter is NULL, the function uses "HTTP/1.0" as the version.
lpszReferer
Address of a string that specifies the address (URL) of the document from which the URL in the request (lpszObjectName) was obtained. If this parameter is NULL, no "referrer" is specified.
lpszAcceptTypes
Address of a null-terminated array of LPCTSTR pointers indicating content types accepted by the client. If this parameter is NULL, no types are accepted by the client. Servers interpret a lack of accept types to indicate that the client accepts only documents of type "text/*" (that is, only text documents and not pictures or other binary files).
dwFlags
Internet flag values. For a list of valid flag values, see
InternetOpenUrl .
dwContext
An application-defined value that associates this operation with any application data.
This function creates a new HTTP request handle and stores the
specified parameters in that handle. An HTTP request handle holds a request to be sent to an HTTP server and contains all RFC822/MIME/HTTP headers to be sent as part of the request.
Use the InternetCloseHandle function to close the handle returned by HttpOpenRequest. InternetCloseHandle cancels all outstanding I/O on the handle.
The lpszReferer parameter to InternetOpen is used as the referrer for the HTTP request.
See also HttpAddRequestHeaders, HttpQueryInfo, HttpSendRequest, InternetCloseHandle, InternetConnect, InternetOpen, InternetReadFile
HttpQueryInfo
BOOL HttpQueryInfo(
IN HINTERNET hHttpRequest, IN DWORD dwInfoLevel,
IN LPVOID lpvBuffer OPTIONAL, IN LPDWORD lpdwBufferLength,
IN OUT LPDWORD lpdwIndex OPTIONAL,
);
Queries for information about an HTTP request.
- Returns TRUE if successful, or FALSE otherwise. To get extended error information, call GetLastError .
hHttpRequest
Open HTTP request handle returned by HttpOpenRequest .
dwInfoLevel
Combination of the attribute to query and the flags that modify the request. The following flags can be used to modify a request:
HTTP_QUERY_INFO_NUMBER
HTTP_QUERY_CUSTOM
HTTP_QUERY_FLAG_COALESCE
This flag is required to set the type of the data returned by HttpQueryInfo to a DWORD.
If this query level is specified, lpvBuffer contains an ASCIIZ header name. This header name is searched for and its value returned in lpvBuffer on output.
Combine the values from several headers of the same name into the output buffer.
HTTP_QUERY_FLAG_REQUEST_HEADERS
Typically, response headers are queried, but an application can
HTTP_QUERY_FLAG_SYSTEMTIME
HTTP_QUERY_FLAG_NUMBER
lpvBuffer
also query request headers by using this flag.
For those headers whose value is a date/time string, such as "Last-Modified-Time", specifying this flag returns the header value as a standard Win32
SYSTEMTIME structure, which does not require the application to parse the data.
For those headers whose value is a number, such as the status code, specifying this flag returns the data as a 32-bit number.
Address of the buffer that receives the information.
lpdwBufferLength
Address of a value that contains the length of the data buffer. When the function returns, this parameter contains the address of a value specifying the length of the information written to the buffer. When the function returns strings, the following rules apply:
-
If the function succeeds, lpdwBufferLength specifies the length of the string, in characters, minus 1 for the terminating null.
-
If the function fails and ERROR_INSUFFICIENT_BUFFER is returned, lpdwBufferLength specifies the number of bytes that the application must allocate in order to receive the string.
lpdwIndex
Address of a zero-based header index used to enumerate multiple headers with the same name. When calling the function, this parameter is the index of the specified header to return. When the function returns, this parameter is the index of the next header. If the next index cannot be found, ERROR_HTTP_HEADER_NOT_FOUND is returned.
The possible values for the dwInfoLevel parameter include:
HTTP_QUERY_MIME_VERSION HTTP_QUERY_CONTENT_TYPE
HTTP_QUERY_CONTENT_TRANSFER_ENCODI NG
HTTP_QUERY_CONTENT_ID HTTP_QUERY_CONTENT_DESCRIPTION HTTP_QUERY_CONTENT_LENGTH HTTP_QUERY_ALLOW
HTTP_QUERY_PUBLIC HTTP_QUERY_DATE
HTTP_QUERY_EXPIRES
HTTP_QUERY_LAST_MODIFIED HTTP_QUERY_MESSAGE_ID HTTP_QUERY_URI HTTP_QUERY_DERIVED_FROM HTTP_QUERY_LANGUAGE HTTP_QUERY_COST HTTP_QUERY_WWW_LINK HTTP_QUERY_PRAGMA HTTP_QUERY_VERSION HTTP_QUERY_STATUS_CODE HTTP_QUERY_STATUS_TEXT HTTP_QUERY_RAW_HEADERS HTTP_QUERY_RAW_HEADERS_CRLF HTTP_QUERY_REQUEST_METHOD
In HTTP_QUERY_REQUEST_METHOD, the lpvBuffer parameter receives the verb that is being used in the request, typically "GET" or "POST".
This function is used to return response or request headers from an HTTP request. You can retrieve different types of data from HttpQueryInfo:
-
strings (default)
-
SYSTEMTIME (for Data: Expires:, headers)
-
DWORD (for STATUS_CODE, CONTENT_LENGTH, and so on if HTTP_QUERY_INFO_NUMBER has been used)
See also HttpOpenRequest
HttpSendRequest
BOOL HttpSendRequest(
IN HINTERNET hHttpRequest,
IN LPCTSTR lpszHeaders OPTIONAL, IN DWORD dwHeadersLength,
IN LPVOID lpOptional OPTIONAL, DWORD dwOptionalLength
);
Sends the specified request to the HTTP server.
- Returns TRUE if successful, or FALSE otherwise. To get extended error information, call GetLastError .
hHttpRequest
Open HTTP request handle returned by HttpOpenRequest .
lpszHeaders
Additional headers to be appended to the request. This parameter can be NULL if there are no additional headers to append.
dwHeadersLength
Length, in characters, of the additional headers. If this parameter is
- 1L and lpszHeaders is not NULL, the function assumes that lpszHeaders is zero-terminated (ASCIIZ), and the length is calculated.
lpOptional
Address of any optional data to send immediately after the request headers. This is generally used for POST and PUT operations. This parameter can be NULL if there is no optional data to send.
dwOptionalLength
Length, in bytes, of the optional data. This parameter can be zero if there is no optional data to send.
This function sends the specified request to the HTTP server and allows the client to specify additional RFC822/MIME/HTTP headers to send along with the request.
The function also lets the client specify optional data to send to the HTTP server immediately following the request headers. This feature is generally used for "write" operations such as PUT and POST.
After the request is sent, the status code and response headers from the HTTP server are read. These headers are maintained internally and are available to client applications through the HttpQueryInfo function.
An application can use the same HTTP request handle in multiple calls to HttpSendRequest, but the application must read all data returned from the previous call before calling the function again.
See also HttpOpenRequest, HttpQueryInfo, InternetReadFile