WINHTTP的API接口说明
BOOL WINAPI WinHttpAddRequestHeaders(
_In_ HINTERNET hRequest,
_In_ LPCWSTR pwszHeaders,
_In_ DWORD dwHeadersLength,
_In_ DWORD dwModifiers
);
作用:加入一个HTTP的请求头域。
參数说明:
hRequest [in]
一个HINTERNET句柄通过调用WinHttpOpenRequest返回。
pwszHeaders [in]
请求的头域字符串,每一个头域(多个头域以)使用回车换行(\r\n)结束
dwHeadersLength [in]
无符号长整型变量,指向pwszHeaders的长度,假设该參数为(ulong)-1L时,自己主动以"/0"结束来计算pwszHeaders的长度。
dwModifiers [in]
头域的改动模式。
包含例如以下值:
WINHTTP_ADDREQ_FLAG_ADD 加入一个头域,假设头域存在时值将被新加入的值替换。与WINHTTP_ADDREQ_FLAG_REPLAC一起使用
WINHTTP_ADDREQ_FLAG_ADD_IF_NEW 加入一个不存在头域,假设该头域存在则返回一个错误。
WINHTTP_ADDREQ_FLAG_COALESCE 将同名的头域进行合并。
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 合并同名的头域,值使用逗号隔开。
WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 合并同名的头域,值使用分号隔开。
WINHTTP_ADDREQ_FLAG_REPLACE 替换和删除一个头域。假设值为空。则删除,否则被替换。
返回值为假时,使用getlasterror来得到错误信息。
err code:
ERROR_WINHTTP_INCORRECT_HANDLE_STATE 请求不能被运行,由于句柄的状态不对
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 请求的句柄类型不对
ERROR_WINHTTP_INTERNAL_ERROR 内部错误
ERROR_NOT_ENOUGH_MEMORY 没有足够的内存来完毕操作。
BOOL WinHttpCheckPlatform(void);
作用:推断是否是微软支持的平台。
返回值:TRUE支持,否则不支持。
BOOL WINAPI WinHttpCloseHandle(
_In_ HINTERNET hInternet
);
作用:关闭一个HINTERNET句柄。
參考:
hInternet [in]
待关闭HINTERNET的句柄。
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_WINHTTP_SHUTDOWN winhttp已关闭或卸载
ERROR_WINHTTP_INTERNAL_ERROR INTERNAL错误
ERROR_NOT_ENOUGH_MEMORY 内存不够
HINTERNET WINAPI WinHttpConnect(
_In_ HINTERNET hSession,
_In_ LPCWSTR pswzServerName,
_In_ INTERNET_PORT nServerPort,
_Reserved_ DWORD dwReserved
);
作用:建立一个http的连接会话。
參数:
hSession [in]
通过调用winHttpOpen返回的session句柄。
pswzServerName [in]
主机或域名。
能够有IP地址也能够是网站域名。
nServerPort [in]
主机的port;
取值:
INTERNET_DEFAULT_HTTP_PORT 默认的HTTPport80。
INTERNET_DEFAULT_HTTPS_PORT 默认的HTTPSport443。能够通过调用WinHttpOpenRequest函数中的WINHTTP_FLAG_SECURE 开启HTTPS
INTERNET_DEFAULT_PORT 默认HTTP为80。HTTPS为443
dwReserved [in]
保留參数,设置为0;
返回值:假设调用成功则返回一个HTTP连接会话的句柄,否则为NULL。为NULL时能够调用getlasterror查看。
err code:
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 句柄的类型不对。
ERROR_WINHTTP_INTERNAL_ERROR INTERNAL错误。
ERROR_WINHTTP_INVALID_URL 无效的URL
ERROR_WINHTTP_OPERATION_CANCELLED 操作被取消。通经常使用于操作完毕前。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME URL不能被识别或不支持。
ERROR_WINHTTP_SHUTDOWN winhttp已关闭或卸载
ERROR_NOT_ENOUGH_MEMORY 内存不够
BOOL WINAPI WinHttpCrackUrl(
_In_ LPCWSTR pwszUrl,
_In_ DWORD dwUrlLength,
_In_ DWORD dwFlags,
_Inout_ LPURL_COMPONENTS lpUrlComponents
);
作用:分离host和路径
參数:
pwszUrl [in]
将正确规范的URL进行分离。但不正确URL做有效性验证。
dwUrlLength [in]
pwszUrl的长度,假设设为0,则默认pwszUrl字符以NULL结束来计算长度。
dwFlags [in]
操作标识。可取值:
ICU_DECODE 字符转换,但不解编码,如UTF-8。
假设使用。能够通过传入URL_COMPONENTS结构。
ICU_ESCAPE 忽略字符转议,相同能够传入URL_COMPONENTS结构进行设置。
ICU_REJECT_USERPWD 拒绝的URL输入包括username,password。或两者。假设函数失败,由于一个无效的URL。随后调用GetLastError函数将返回ERROR_WINHTTP_INVALID_URL的。
lpUrlComponents [in, out]
指向URL_COMPONENTS 结构的指针
返回值:
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_WINHTTP_INVALID_URL
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
ERROR_NOT_ENOUGH_MEMORY
DWORD WinHttpCreateProxyResolver(
_In_ HINTERNET hSession,
_Out_ HINTERNET *phResolver
);
作用:创建代理解释器
參数:
hSession [in]
成功调用WinHttpOpen返回的句柄。该句柄必须打开WINHTTP_FLAG_ASYNC标识。
phResolver [out]
通过调用WinHttpGetProxyForUrlEx返回的一个新句柄。当完毕或取消时可调用WinHttpCloseHandle来关闭。
返回值:返回操作的状态
ERROR_SUCCESS 操作成功
ERROR_INVALID_HANDLE hSession 为NULL
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE hSession 不是调用 WinHttpOpen 返回或 hSession 没有开启异步标识 WINHTTP_FLAG_ASYNC
BOOL WINAPI WinHttpCreateUrl(
_In_ LPURL_COMPONENTS lpUrlComponents,
_In_ DWORD dwFlags,
_Out_ LPWSTR pwszUrl,
_Inout_ LPDWORD lpdwUrlLength
);
作用:创建一个URL。
參数:
lpUrlComponents [in]
指向一个包括要创建的URL的 URL_COMPONENTS 结构体指针
dwFlags [in]
操作模式,取值:
ICU_ESCAPE 转换结构体中的lpszUrlPath 和 lpszExtraInfo中的全部不安全的转议字符。
ICU_REJECT_USERPWD 拒绝的URL输入包括username,password。或两者。假设函数失败。由于一个无效的URL。随后调用GetLastError函数将返回ERROR_WINHTTP_INVALID_URL的。
pwszUrl [out]
指向一个宽字节的字符串。
lpdwUrlLength [in, out]
设定能够接收pwszUrl字符的长度。
返回值:
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpDetectAutoProxyConfigUrl(
_In_ DWORD dwAutoDetectFlags,
_Out_ LPWSTR *ppwszAutoConfigUrl
);
作用:删除自己主动代理配置的URL
參数:
dwAutoDetectFlags [in]
使用本地PAC文件协议,假设DHCP和DNS都被检測到。则优先使用DHCP,假设PAC URL 使用DHCP检測不到再使用DNS。
取值:
WINHTTP_AUTO_DETECT_TYPE_DHCP 使用DHCP
WINHTTP_AUTO_DETECT_TYPE_DNS_A 使用DNS
ppwszAutoConfigUrl [out]
返回一个代理数据URL的宽字节字符串,必须调用 GlobalFree 来释放该字符串。
返回值:
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_WINHTTP_AUTODETECTION_FAILED 返回WinHTTP的代理自己主动配置(PAC)文件是无法发现的URL。
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
VOID WINAPI WinHttpFreeProxyResult(
_Inout_ WINHTTP_PROXY_RESULT *pProxyResult
);
作用:释放代理
參数:
pProxyResult [in, out]
指向 WINHTTP_PROXY_RESULT 结构的指针。该结构调用 WinHttpGetProxyResult得到。
BOOL WINAPI WinHttpGetDefaultProxyConfiguration(
_Inout_ WINHTTP_PROXY_INFO *pProxyInfo
);
作用:获了以默认代理配置。
參数:
pProxyInfo [in, out]
指向WINHTTP_PROXY_INFO结构的指针。
返回值:
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser(
_Inout_ WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *pProxyConfig
);
作用:得到当前用户的IE代理配置
參数:
pProxyConfig [in, out]
指向WINHTTP_CURRENT_USER_IE_PROXY_CONFIG 结构的指针,作为传出參数时。包含当前IE网络连接的代理配置信息。如VPN,LAN, 拔号连接等。
返回值:
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_FILE_NOT_FOUND IE设置文件没有发现。
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpGetProxyForUrl(
_In_ HINTERNET hSession,
_In_ LPCWSTR lpcwszUrl,
_In_ WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions,
_Out_ WINHTTP_PROXY_INFO *pProxyInfo
);
作用:通过URL得到代理信息。
參数:
hSession [in]
通过调用WinHttpOpen函数返回的hSession句柄。
lpcwszUrl [in]
宽字节的URL
pAutoProxyOptions [in]
指向使用自己主动代理选项的WINHTTP_AUTOPROXY_OPTIONS 结构体指针。
pProxyInfo [out]
指向 WINHTTP_PROXY_INFO 结构的指针。 这信结构体将应用到WINHTTP_OPTION_PROXY结构中的option项。
释放结构中的lpszProxy和lpszProxyBypass字符串。使用 GlobalFree 函数。
返回值:
当返回false时能够调用getlasterror来得到相关信息。
err code:
ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR URL无法指定代理,找不到代理server错误。
ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT 在自己主动代理配置文件里出错PAC文件。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 句柄类型不对。
ERROR_WINHTTP_INTERNAL_ERROR 网络异常。
ERROR_WINHTTP_INVALID_URL URL无效。
ERROR_WINHTTP_LOGIN_FAILURE 登录尝试失败。当遇到此错误时,关闭请求句柄调用WinHttpCloseHandle。
必须创建一个新的请求进行重试。
ERROR_WINHTTP_OPERATION_CANCELLED 操作被取消
ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT 找不到PAC文件或返回404 not found。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME PAC文件指定的URL不是http或https开头的请求
ERROR_NOT_ENOUGH_MEMORY 内存不够
DWORD WinHttpGetProxyForUrlEx(
_In_ HINTERNET hResolver,
_In_ PCWSTR pcwszUrl,
_In_ WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions,
_In_ DWORD_PTR pContext
);
作用:通过URL获代替理信息。
參数:
hResolver [in]
通过调用WinHttpCreateProxyResolver函数返回的句柄。
pcwszUrl [in]
unicode URL字符串。
pAutoProxyOptions [in]
指向使用自己主动代理选项的WINHTTP_AUTOPROXY_OPTIONS结构体指针。
pContext [in]
上下文数据将被回调函数进行回调。
返回值:返回操作结果的状态值。
取值:
ERROR_IO_PENDING 异步操作正在进行中。
ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR URL定位不到代理server。
ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT 自己主动代理配置文件出错(PAC)。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 句柄类型不对。
ERROR_WINHTTP_INVALID_URL 无效的URL。
ERROR_WINHTTP_OPERATION_CANCELLED 操作被取消。
ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT URL未搜索到或server返回404 not found。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME PAC文件指定的URL不是http或https开头的请求
ERROR_NOT_ENOUGH_MEMORY
DWORD WINAPI WinHttpGetProxyResult(
_In_ HINTERNET hResolver,
_Out_ WINHTTP_PROXY_RESULT *pProxyResult
);
作用:获代替理结果。
參数:
hResolver [in]
调用WinHttpGetProxyForUrlEx函数返回的句柄。
pProxyResult [out]
指向WINHTTP_PROXY_RESULT的结构体指针。该结构包含内调用WinHttpGetProxyForUrlEx后得到的代理结果数据, 这个结果数据必须调用WinHttpFreeProxyResult进行释放。
返回值:返回操作结果的状态值。
取值:
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE 句柄类型不对。
ERROR_WINHTTP_INCORRECT_HANDLE_STATE 调用WinHttpGetProxyForUrlEx返回的句柄状态不对。
HINTERNET WINAPI WinHttpOpen(
_In_opt_ LPCWSTR pwszUserAgent,
_In_ DWORD dwAccessType,
_In_ LPCWSTR pwszProxyName,
_In_ LPCWSTR pwszProxyBypass,
_In_ DWORD dwFlags
);
作用:HTTP初始化。
參数:
pwszUserAgent [in, optional]
HTTP协议中的User-Agent的字符串变量。
dwAccessType [in]
请求类型,取值:
WINHTTP_ACCESS_TYPE_NO_PROXY 攻克了全部不使用代理server的主机名。
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY 检測静态代理或注冊表配置代理,不继承和不共享IE的代理设置。调用WinHttpSetDefaultProxyConfiguration进行设置。
WINHTTP_ACCESS_TYPE_NAMED_PROXY 通过路由列表指定的名称进行代理。
pwszProxyName [in]
当dwAccessType设置为WINHTTP_ACCESS_TYPE_NAMED_PROXY时,必须指定代理名称,winHttp函数库仅仅支持CERN前缀的HTTP代理。
假设dwAccessType不设置WINHTTP_ACCESS_TYPE_NAMED_PROXY,则该參数必须设置为WINHTTP_NO_PROXY_NAME
pwszProxyBypass [in]
代理的主机名或IP地址,假设dwAccessType设置为WINHTTP_ACCESS_TYPE_NAMED_PROXY不使用路由代理。
能够使用通配符字串,不要使用空字符串。假设指定为"<local>"宏作为入口。该功能通过不论什么主机。
假设dwAccessType不设置为WINHTTP_ACCESS_TYPE_NAMED_PROXY则该參数值必须为WINHTTP_NO_PROXY_BYPASS。
dwFlags [in]
标志值,取值:
WINHTTP_FLAG_ASYNC 默认情况下是同步请求过程,假设使用异步请求。须要调用WinHttpSetStatusCallback来设定回调函数。
返回值:
假设成功返回一个session句柄,否则返回NULL。
HINTERNET WINAPI WinHttpOpenRequest(
_In_ HINTERNET hConnect,
_In_ LPCWSTR pwszVerb,
_In_ LPCWSTR pwszObjectName,
_In_ LPCWSTR pwszVersion,
_In_ LPCWSTR pwszReferrer,
_In_ LPCWSTR *ppwszAcceptTypes,
_In_ DWORD dwFlags
);
作用:建立一个http请求,返回成功请求句柄。
hConnect [in]
通过调用WinHttpConnect返回的句柄。
pwszVerb [in]
HTTP请求动作。如get,post等,假设设为NULL。则默觉得GET请求。
pwszObjectName [in]
包括指定的HTTP请求的目标资源的名称。这一般是一个文件名称,可运行模块,或搜索符。
pwszVersion [in]
HTTP的版本号,假设为NULL,默觉得 HTTP/1.1.
pwszReferrer [in]
指向一个字符串,该字符串指定的文件的URL,该URL的要求填写pwszObjectName。
假设没有设定规定的文件,这參数设置为WINHTTP_NO_REFERER。
ppwszAcceptTypes [in]
设置为WINHTTP_DEFAULT_ACCEPT_TYPES接收类型,默觉得纯文本的图片和二进制,假设是多媒体数据接收。须要进行类型指定。请參考:http://www.iana.org/assignments/media-types/
dwFlags [in]
标识,取值:
WINHTTP_FLAG_BYPASS_PROXY_CACHE 与WINHTTP_FLAG_REFRESH的行为同样,进行刷新。
WINHTTP_FLAG_ESCAPE_DISABLE pwszObjectName中的字符被进行转议。
WINHTTP_FLAG_ESCAPE_DISABLE_QUERY 查询pwszObjectName中的字符须要进行字符转义。
WINHTTP_FLAG_ESCAPE_PERCENT pwszObjectName中传递的字符串从LPCWSTR转换为LPSTR。全部不安全的字符转换为转义序列,包含百分比符号。默认情况下,全部不安全的百分比符号之外的字符转换为转义序列。
WINHTTP_FLAG_NULL_CODEPAGE pwszObjectName中的ANSI字符替换为WCHAR字符,不正确转议进行检測。
WINHTTP_FLAG_REFRESH 当使用此标志时。一个“的Pragma:no-cache的”头加入到请求句柄。
当创建一个HTTP请求头。一个“的Cache-Control:no-cache的”也添加了。
WINHTTP_FLAG_SECURE 启用SSL/TLS安全。
返回值:成功返回请求的句柄,否则为NULL。
BOOL WINAPI WinHttpQueryAuthSchemes(
_In_ HINTERNET hRequest,
_Out_ LPDWORD lpdwSupportedSchemes,
_Out_ LPDWORD lpdwFirstScheme,
_Out_ LPDWORD pdwAuthTarget
);
作用:函数返回的server所支持的授权方案。
參数:
hRequest [in]
调用WinHttpOpenRequest返回的句柄。
lpdwSupportedSchemes [out]
当前支持的授权方式。取值:
WINHTTP_AUTH_SCHEME_BASIC BASIC认证方式。
WINHTTP_AUTH_SCHEME_NTLM NTLM认证方式。
WINHTTP_AUTH_SCHEME_PASSPORT PASSPORT认证方式。
WINHTTP_AUTH_SCHEME_DIGEST DIGEST认证方式。
WINHTTP_AUTH_SCHEME_NEGOTIATE 在NTLM 。 Kerberos之间的认证方式。
lpdwFirstScheme [out]
首选授权方式,取值:
WINHTTP_AUTH_SCHEME_BASIC BASIC认证方式。
WINHTTP_AUTH_SCHEME_NTLM NTLM认证方式。
WINHTTP_AUTH_SCHEME_PASSPORT PASSPORT认证方式。
WINHTTP_AUTH_SCHEME_DIGEST DIGEST认证方式。
WINHTTP_AUTH_SCHEME_NEGOTIATE 在NTLM 。 Kerberos之间的认证方式。
pdwAuthTarget [out]
授权目标。取值:
WINHTTP_AUTH_TARGET_SERVER server授权。
WINHTTP_AUTH_TARGET_PROXY 代理授权。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpQueryDataAvailable(
_In_ HINTERNET hRequest,
_Out_ LPDWORD lpdwNumberOfBytesAvailable
);
作用:请求返回的数据量,以字节为位进行读取。
參数:
hRequest [in]
调用WinHttpOpenRequest返回的句本。
在调用WinHttpQueryDataAvailable之前,必须先调用WinHttpReceiveResponse。
lpdwNumberOfBytesAvailable [out]
字节流数据。假设设置为异步接收,则这里为NULL,通过回调函数进行处理。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpQueryHeaders(
_In_ HINTERNET hRequest,
_In_ DWORD dwInfoLevel,
_In_opt_ LPCWSTR pwszName,
_Out_ LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength,
_Inout_ LPDWORD lpdwIndex
);
作用:HTTP头域数据。
參数:
hRequest [in]
调用WinHttpOpenRequest返回的句柄。
在使用WinHttpQueryHeaders前必须等WinHttpReceiveResponse调用完毕。
dwInfoLevel [in]
类型为DWORD值。指定查询信息标志页上列出的属性和修饰符标志的组合。这些属性和修饰符标志指示被请求的信息。以及它是怎样被格式化。
pwszName [in, optional] 可选
头域名。假设dwInfoLevel參数不是WINHTTP_QUERY_CUSTOM,则设置为WINHTTP_HEADER_NAME_BY_INDEX。
lpBuffer [out]
接收该信息的缓冲区的指针。
将该參数设置为WINHTTP_NO_OUTPUT_BUFFER导致该函数返回FALSE。
调用GetLastError,然后返回ERROR_INSUFFICIENT_BUFFER和lpdwBufferLength包括的字节数必须持有所要求的信息。
lpdwBufferLength [in, out]
指针类型为DWORD的值指定的数据缓冲区的长度,以字节为单位。
当函数返回时,此參数包括指针的值。指定的信息写入到缓冲区的长度。
当函数返回字符串,以下的规则适用
1、假设函数调用成功,lpdwBufferLength指定字符串的长度,以字节为单位。减去终止空。
2、假设函数调用失败,则返回ERROR_INSUFFICIENT_BUFFER。lpdwBufferLength指定的字节数,应用程序必须分配给接收字符串。
lpdwIndex [in, out]
指针用于列举多个具有同样名称的头一个从零開始的头索引。当调用该函数时,这个參数是返回指定的头的索引。
当函数返回时。此參数是该指数下一个标头。
假设无法找到的下一个索引。则返回ERROR_WINHTTP_HEADER_NOT_FOUND。设置此參数WINHTTP_NO_HEADER_INDEX来指定应返回的头,仅仅有第一次出现。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpQueryOption(
_In_ HINTERNET hInternet,
_In_ DWORD dwOption,
_Out_ LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength
);
作用:查询指定的句柄上的“Internet选项”。
參数:
hInternet [in]
HINTERNET句柄上查询信息。注意,这可能是一个会话句柄或请求句柄。这取决于正在查询的选项,选项标志主题,以确定该句柄是适当的使用中查询特定的选项。
dwOption [in]
无符号长整型值,包括的“Internet选项”查询。
lpBuffer [out]
接收选项设置的缓冲区的指针。
返回的字符串的WinHttpQueryOption功能在全球范围内分配的,所以当它完毕了使用它的调用应用程序必须在全球范围释放该字符串。
将该參数设置为NULL,此函数返回FALSE。
调用GetLastError,然后返回ERROR_INSUFFICIENT_BUFFER和lpdwBufferLength包括的字节数必须持有所要求的信息。
lpdwBufferLength [in, out]
指针指向一个无符号长整型变量,它包括lpBuffer的长度,以字节为单位。在函数返回时。该变量接收的数据放入lpBuffer的长度。
假设GetLastError返回ERROR_INSUFFICIENT_BUFFER的,这个參数接收的字节数必须持有所要求的信息。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpReadData(
_In_ HINTERNET hRequest,
_Out_ LPVOID lpBuffer,
_In_ DWORD dwNumberOfBytesToRead,
_Out_ LPDWORD lpdwNumberOfBytesRead
);
作用:读取返回的数据。
能数:
hRequest [in]
调用WinHttpOpenRequest返回的句柄。
在调用该函数之前,必须先调用 WinHttpOpenRequest和WinHttpReceiveResponse 或者 WinHttpQueryDataAvailable函数。
lpBuffer [out]
接收数据的缓冲区。
dwNumberOfBytesToRead [in]
缓冲区大小长度。
lpdwNumberOfBytesRead [out]
传出接收的字节数。假设设置为NULL。则调用回调函数进行读取。
返回值:TRUE or FALSE。
BOOL WINAPI WinHttpReceiveResponse(
_In_ HINTERNET hRequest,
_Reserved_ LPVOID lpReserved
);
作用:
參数:
hRequest [in]
通过调用WinHttpOpenRequest且调用WinHttpSendRequest返回的句柄 等待WinHttpSendRequest发送完毕时调用WinHttpReceiveResponse。
lpReserved [in]
预留參数。设置为NULL。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_CANNOT_CONNECT server连接失败。
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED 请求须要进行授权认证。
ERROR_WINHTTP_CONNECTION_ERROR server重置或关闭或SSL不兼容。
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW 调用 WinHttpReceiveResponse 溢出。
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
ERROR_WINHTTP_INVALID_URL
ERROR_WINHTTP_LOGIN_FAILURE
ERROR_WINHTTP_NAME_NOT_RESOLVED
ERROR_WINHTTP_OPERATION_CANCELLED
ERROR_WINHTTP_REDIRECT_FAILED
ERROR_WINHTTP_RESEND_REQUEST
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
ERROR_WINHTTP_SECURE_FAILURE SSL认证失败。
ERROR_WINHTTP_TIMEOUT
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
ERROR_NOT_ENOUGH_MEMORY
DWORD WinHttpResetAutoProxy(
_In_ HINTERNET hSession,
_In_ DWORD dwFlags
);
作用:重置自己主动代理
參数:
hSession [in]
调用WinHttpOpen返回的句柄。
dwFlags [in]
重置标志位,取值:
WINHTTP_RESET_SCRIPT_CACHE 刷新持久的HTTP缓存的代理脚本。
WINHTTP_WRAPPER_RESET_STATE 强制重试网络代理信息。
NHTTP_RESET_OUT_OF_PROC 须要关闭使用WinHttpGetProxyForUrl过程中的缓存须要清除HINTERNET句柄。
返回值:
ERROR_SUCCESS 重置成功。
ERROR_INVALID_HANDLE hSession句柄无效。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE hSession不是由WinHttpOpen返回。
BOOL WINAPI WinHttpSendRequest(
_In_ HINTERNET hRequest,
_In_opt_ LPCWSTR pwszHeaders,
_In_ DWORD dwHeadersLength,
_In_opt_ LPVOID lpOptional,
_In_ DWORD dwOptionalLength,
_In_ DWORD dwTotalLength,
_In_ DWORD_PTR dwContext
);
作用:发送请求数据。
參数:
hRequest [in]
调用WinHttpOpenRequest返回的句柄。
pwszHeaders [in, optional]
HTTP请求头域,假设不须要额外的头域,能够设置为:WINHTTP_NO_ADDITIONAL_HEADERS
dwHeadersLength [in]
头域的长度。假设设置为-1L则,将以字符"/0"结束来计算头域的长度。
lpOptional [in, optional]
一个指针,指向一个缓冲区。当中包括可选的数据发送后。马上请求标头。
该參数通经常使用于POST和PUT操作。
可选的数据能够被发送到server的资源或数据。假设没有可选的数据发送这參数能够是WINHTTP_NO_REQUEST_DATA的。
假设为0,则參数被忽略。置为NULL。
缓冲区的生命周期必须在调用WinHttpReceiveResponse完毕后进行关闭。
dwOptionalLength [in]
假设没有数据发送时。设置为0。
假设lpOptional不为空时,则这个值必须有意义。否则将被忽略变为NULL。
dwTotalLength [in]
无符号长整型值,包括的总发送的数据的长度,以字节为单位。此參数指定Content-Length头的要求。
假设这个參数的值是大于由dwOptionalLength指定的长度。然后WinHttpWriteData能够用于发送额外的数据。
dwContext [in]
一个指针变量。它包括一个应用程序定义的值传递,请求句柄,不论什么回调函数的指针。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_CANNOT_CONNECT
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
ERROR_WINHTTP_CONNECTION_ERROR
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_WINHTTP_INVALID_URL
ERROR_WINHTTP_LOGIN_FAILURE
ERROR_WINHTTP_NAME_NOT_RESOLVED
ERROR_WINHTTP_OPERATION_CANCELLED
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
ERROR_WINHTTP_SECURE_FAILURE
ERROR_WINHTTP_SHUTDOWN
ERROR_WINHTTP_TIMEOUT
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
ERROR_NOT_ENOUGH_MEMORY
ERROR_INVALID_PARAMETER
ERROR_WINHTTP_RESEND_REQUEST
BOOL WINAPI WinHttpSetCredentials(
_In_ HINTERNET hRequest,
_In_ DWORD AuthTargets,
_In_ DWORD AuthScheme,
_In_ LPCWSTR pwszUserName,
_In_ LPCWSTR pwszPassword,
_Reserved_ LPVOID pAuthParams
);
作用:设置HTTP请求证书。
參数:
hRequest [in]
调用WinHttpOpenRequest返回的句柄。
AuthTargets [in]
授权目标,取值:
WINHTTP_AUTH_TARGET_SERVER server授权
WINHTTP_AUTH_TARGET_PROXY 代理授权
AuthScheme [in]
认证方式,通过 WinHttpQueryAuthSchemes能够得到支持哪些认证方式。
通常有:
WINHTTP_AUTH_SCHEME_BASIC BASIC认证方式。
WINHTTP_AUTH_SCHEME_NTLM NTLM认证方式。
WINHTTP_AUTH_SCHEME_PASSPORT PASSPORT认证方式。
WINHTTP_AUTH_SCHEME_DIGEST DIGEST认证方式。
WINHTTP_AUTH_SCHEME_NEGOTIATE 在NTLM , Kerberos之间的认证方式。
pwszUserName [in]
证书的username
pwszPassword [in]
证书的password
pAuthParams [in]
保留參数,设置为NULL。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpSetDefaultProxyConfiguration(
_In_ WINHTTP_PROXY_INFO *pProxyInfo
);
作用:设置默认代理配置。
參数:
pProxyInfo [in]
一个指向WINHTTP_PROXY_INFO的结构体指针。
返回值:TRUE or FALSE
err code:
ERROR_WINHTTP_INTERNAL_ERROR
ERROR_NOT_ENOUGH_MEMORY
BOOL WINAPI WinHttpSetOption(
_In_ HINTERNET hInternet,
_In_ DWORD dwOption,
_In_ LPVOID lpBuffer,
_In_ DWORD dwBufferLength
);
作用:IE选项设置。
參数:
hInternet [in]
会话或请求句柄。
dwOption [in]
IE选项。值參考: Option Flags 。
lpBuffer [in]
选项缓冲区。
dwBufferLength [in]
无符号长整型值。包括lpBuffer缓冲区的长度。
下列选项中指定的字符缓冲区的长度;全部其它选项,指定的长度(以字节为单位)。
返回值:TRUE or FALSE
WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(
_In_ HINTERNET hInternet,
_In_ WINHTTP_STATUS_CALLBACK lpfnInternetCallback,
_In_ DWORD dwNotificationFlags,
_Reserved_ DWORD_PTR dwReserved
);
作用:设置回调函数来得到请求状态。
參数:
hInternet [in]
须要设置回调函数的句柄。
lpfnInternetCallback [in]
回调函数指针。假设设置为NULL。则不使用回调。
回调函数声明參考WINHTTP_STATUS_CALLBACK
typedef void ( CALLBACK *WINHTTP_STATUS_CALLBACK)(
_In_ HINTERNET hInternet,
_In_ DWORD_PTR dwContext,
_In_ DWORD dwInternetStatus,
_In_ LPVOID lpvStatusInformation,
_In_ DWORD dwStatusInformationLength
);
dwNotificationFlags [in]
回调函数事件通知标识。
取值:
WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS 不论什么处理完毕的通知。
WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS 不论什么状态改变时激活通知。
WINHTTP_CALLBACK_FLAG_RESOLVE_NAME 解释名称完毕时激活通知。
WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER 当连接到服务时激活该通知。
WINHTTP_CALLBACK_FLAG_DETECTING_PROXY 当检測到server时激活该通知。
WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE 当获到数据时激知该通知。
WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE 当返回响应头时激活该通知。
WINHTTP_CALLBACK_FLAG_READ_COMPLETE 当数据读取完毕时激活通知。
WINHTTP_CALLBACK_FLAG_REQUEST_ERROR 当异步操作请求错误时激活通知。
WINHTTP_CALLBACK_FLAG_SEND_REQUEST 当通过调用WinHttpSendRequest開始发送时激活该通知。
WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE 当通过调用WinHttpSendRequest发送完毕时激活该通知。
WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE 当POST数据操作完毕时激活该通知。
WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE 当Response响应接收资源时激活该通知。
WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION 当正在关闭连接时激活该通知。
WINHTTP_CALLBACK_FLAG_HANDLES 当HTTP连接创建或关闭时激活通知。
WINHTTP_CALLBACK_FLAG_REDIRECT 当请求重定向时激活通知。
WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE 当接收到一个来自server的消息中间状态代码(100level)时激活通知。
WINHTTP_CALLBACK_FLAG_SECURE_FAILURE 当证书认证失败时激活该通知。
dwReserved [in]
保留參数,设置为NULL。
返回值:
假设调用成功则返回CALLBACK的函数指针。假设失败返回WINHTTP_INVALID_STATUS_CALLBACK。则调用getlasterror来查询信息。
BOOL WINAPI WinHttpSetTimeouts(
_In_ HINTERNET hInternet,
_In_ int dwResolveTimeout,
_In_ int dwConnectTimeout,
_In_ int dwSendTimeout,
_In_ int dwReceiveTimeout
);
作用:设置HTTP请求超时。
參数:
hInternet [in]
通过WinHttpOpen 或 WinHttpOpenRequest返回的句柄。
dwResolveTimeout [in]
设置处理请求超时时间,以毫秒为单位。假设为0,表示不使用超时。
Windows Vista和Windows XP:假设DNS超时时间使用NAME_RESOLUTION_TIMEOUT指定的,是每一个请求一个线程的开销。
dwConnectTimeout [in]
设置连接超时时间,以毫秒为单位,默觉得60秒。
dwSendTimeout [in]
设置发送请求的超时时间,默觉得30秒。
dwReceiveTimeout [in]
设置响应接收的超时时间,默觉得30秒。
返回值:TRUE or FALSE
BOOL WINAPI WinHttpTimeFromSystemTime(
_In_ const SYSTEMTIME *pst,
_Out_ LPWSTR pwszTime
);
作用:格式化系统时间。
參数:
pst [in]
指向SYSTEMTIME 结构的指针。
pwszTime [out]
缓冲区。缓冲区的大小与WINHTTP_TIME_FORMAT_BUFSIZE相等。
返回值:TRUE or FALSE
BOOL WINAPI WinHttpTimeToSystemTime(
_In_ LPCWSTR pwszTime,
_Out_ SYSTEMTIME *pst
);
作用:将本地时间转为系统时间。
參数:
pwszTime [in]
指向一个时间格式的字符串, 这个时间格式必须符合RFC2616中的3.3章节中的格式。
pst [out]
指向转换后的系统时间SYSTEMTIME结构指针。
返回值:TRUE or FALSE
BOOL WINAPI WinHttpWriteData(
_In_ HINTERNET hRequest,
_In_ LPCVOID lpBuffer,
_In_ DWORD dwNumberOfBytesToWrite,
_Out_ LPDWORD lpdwNumberOfBytesWritten
);
作用:写内存数据。
參数:
hRequest [in]
调用WinHttpOpenRequest返回的句柄。 在调用该方法前必须等待函数 WinHttpSendRequest 调用完毕。
lpBuffer [in]
发送到server的BUFFER数据,确保数据的有效性必须直到WinHttpWriteData调用完毕。
dwNumberOfBytesToWrite [in]
须要写入的数据长度。
lpdwNumberOfBytesWritten [out]
写完毕的buffer大小,假设设置为NULL,则使用异步的方式时须要在回调中进行写入。
返回值:TRUE or FALSE
DWORD WINAPI WinHttpWebSocketClose(
_In_ HINTERNET hWebSocket,
_In_ USHORT usStatus,
_In_opt_ PVOID pvReason,
_In_ DWORD dwReasonLength
);
作用:关闭WEB 的SOCKET
參数:
hWebSocket [in]
web socket句柄。注:假设调用了WinHttpCloseHandle来关闭该句柄,则不用再次调用该函数来关闭。
usStatus [in]
状态代码。见 WINHTTP_WEB_SOCKET_CLOSE_STATUS 中的详细值。
pvReason [in, optional]
具体的关闭原因。
dwReasonLength [in]
原因内容的长度。假设为0。则大为小0-123 即124长度。
HINTERNET WINAPI WinHttpWebSocketCompleteUpgrade(
_In_ HINTERNET hRequest,
_In_opt_ DWORD_PTR pContext
);
作用:WEBSOCKET更新完毕。
hRequest [in]
http 请求句柄。
pContext [in, optional]
上下文关联的新句柄。
返回值:
返回新的WebSocket句柄。
DWORD WINAPI WinHttpWebSocketQueryCloseStatus(
_In_ HINTERNET hWebSocket,
_Out_ USHORT *pusStatus,
_Out_ PVOID pvReason,
_In_ DWORD dwReasonLength,
_Out_ DWORD *pdwReasonLengthConsumed
);
作用:WEBSOCKET关闭状态查询。
參数:
hWebSocket [in]
WebSocket句柄。
pusStatus [out]
状态码,见WINHTTP_WEB_SOCKET_CLOSE_STATUS列表中的值。
pvReason [out]
关闭的原因。
dwReasonLength [in]
原因内容的长度。
pdwReasonLengthConsumed [out]
假设pvReason为空且dwReasonLength为0,则此值将包括由调用应用程序须要分配的缓冲区的大小。
返回值:
假设成功返回NO_ERROR 。
假设失败返回:
ERROR_INSUFFICIENT_BUFFER
ERROR_INVALID_OPERATION
ERROR_INVALID_PARAMETER
DWORD WINAPI WinHttpWebSocketReceive(
_In_ HINTERNET hWebSocket,
_Out_ PVOID pvBuffer,
_In_ DWORD dwBufferLength,
_Out_ DWORD *pdwBytesRead,
_Out_ WINHTTP_WEB_SOCKET_BUFFER_TYPE *peBufferType
);
作用:接收数据。
參数:
hWebSocket [in]
WebSocket句柄。
pvBuffer [out]
接收数据的缓冲区。
dwBufferLength [in]
缓冲区长度。
pdwBytesRead [out]
读取数据操作,假设调用WinHttpWebSocketReceive 返回NO_ERROR 且句柄为同步模式。
peBufferType [out]
缓冲区指针,这个设置仅仅有当WinHttpWebSocketReceive 同步模式开启且返回NO_ERROR 时才有值。
返回值:
成功调用返回NO_ERROR
失败调用返回错误码:
ERROR_INVALID_OPERATION 操作无效。
ERROR_INVALID_PARAMETER 參数无效。
ERROR_INVALID_SERVER_RESPONSE server响应无效。
ERROR_WINHTTP_OPERATION_CANCELLED 操作被取消。
DWORD WINAPI WinHttpWebSocketSend(
_In_ HINTERNET hWebSocket,
_In_ WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType,
_In_ PVOID pvBuffer,
_In_ DWORD dwBufferLength
);
作用:发送数据。
參数:
hWebSocket [in]
websocket句柄。
eBufferType [in]
缓冲区类型。假设不指定WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE,用户须要使用WinHttpWebSocketClose或WinHttpWebSocketShutdown进行关闭连接。
pvBuffer [in]
发送缓冲区。当dwBufferLength为0时,能够设置为NULL。
dwBufferLength [in]
缓冲区的长度。
返回值:
成功返回NO_ERROR
失败返回
ERROR_INVALID_OPERATION 操作无效。
ERROR_INVALID_PARAMETER 參数无效。
DWORD WINAPI WinHttpWebSocketShutdown(
_In_ HINTERNET hWebSocket,
_In_ USHORT usStatus,
_In_opt_ PVOID pvReason,
_In_ DWORD dwReasonLength
);
作用:关闭SOCKET。
參数:
hWebSocket [in]
WebSocket句柄。
usStatus [in]
參见WINHTTP_WEB_SOCKET_CLOSE_STATUS列表。
pvReason [in, optional]
shutdown的原因。
dwReasonLength [in]
shutdown原因的内容长度。
假设填为NULL。则默信为0-123
返回值:
全部的错误代码表明,底层的TCP连接已中断。
ERROR_IO_PENDING 操作将异步完毕。
參考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa384257(v=vs.85).aspx
WINHTTP的API接口说明的更多相关文章
- WINHTTP的API接口说明。
BOOL WINAPI WinHttpAddRequestHeaders( _In_ HINTERNET hRequest, _In_ LPCWSTR pwszHeaders, _In ...
- 干货来袭-整套完整安全的API接口解决方案
在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...
- 12306官方火车票Api接口
2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...
- 快递Api接口 & 微信公众号开发流程
之前的文章,已经分析过快递Api接口可能被使用的需求及场景:今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景. 开发语言:Nodejs,其中用到了Neo4j图 ...
- web api接口同步和异步的问题
一般来说,如果一个api 接口带上Task和 async 一般就算得上是异步api接口了. 如果我想使用异步api接口,一般的动机是我在我的方法里面可能使用Task.Run 进行异步的去处理一个耗时的 ...
- HTTP API接口安全设计
HTTP API接口安全设计 API接口调用方式 HTTP + 请求签名机制 HTTP + 参数签名机制 HTTPS + 访问令牌机制 有没有更好的方案? OAuth授权机制 OAuth2.0服务 ...
- Postman - 功能强大的 API 接口请求调试和管理工具
Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...
- H3 BPM引擎API接口
引擎API接口通过 Engine 对象进行访问,这个是唯一入口. 示例1:获取组织机构对象 this.Engine.Organization.GetUnit("组织ID"); 示例 ...
- 移动端API接口优化的术和结果
最近一直在忙工作的事情,所以文章写得有些少. 有3-5篇文章都是写到一半然后被别的事情给打断了,所以,我得找个时间好好补补. 最近一直在关注移动端接口API的可用性问题,在移动时代这个做这个优化能产生 ...
随机推荐
- Git协作流程(转)
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的流程,让大家有效地合作,使得项目井井有条地发展下去."协作流程"在英语里,叫做"workflo ...
- 微软Visual Studio "14" CTP 2 公布
对于在微软阵营下进行工作的团队来说,拥有最新版本号的Visual Studio是提高效率最佳的选择,没有之中的一个. 在本文中,我们就上个月公布的Visual Studio "14&q ...
- 如何在SSIS的脚本组件中访问变量
原文:如何在SSIS的脚本组件中访问变量 这是一个小问题,我们在SSIS的设计中很多地方都会用到变量,我习惯性地将"变量"和"表达式"称为SSIS的灵魂,虽然不 ...
- OC省字典的数组摘要集
开放式党员 NSString *filePath = @"/Users/dlios/Downloads/area.txt"; 推断错误值 打印出来 NSError *error = ...
- JavaEE(10) - Session EJB的依赖注入、引用及任务调度
1. EJB依赖注入 #1. EJB开发(Net Beans创建EJB Module, 项目名称:CallHello) Hello.java package org.crazyit.service; ...
- 百度官方wormHole后门检测记录(转)
本次这个安卓后门真是哔了狗了,刚加入大安卓阵营就出了这个篓子,跟你root不root和什么安卓版本没有版毛钱关系,完全是百度SDK官方提供的后门,不是漏洞,人为的. 乌云地址:http://drops ...
- Android在第三方应用程序系统应用尽早开始,杀死自己主动的第三方应用程序,以重新启动
1.为什么第三方应用程序可能早于System的app启动? Android能够查阅了,这里就不细述了,这里不阐述ROM启动还有bootloader.软件启动的大致流程应该是 启动kernel 执行se ...
- newlisp获得bash该命令的退出状态
newlisp exec你可以运行bash命令.但如何返回状态来运行它? 特别是,我需要监控hdfs dfs -test 结果返回.经过一番摸索,我发现了一个简单的答案: #!/usr/bin/new ...
- HTTP的REST服务简介
REST简介 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么, ...
- Oracle数据库之开发PL/SQL子程序和包
Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...