http请求大多包含在winhttp.h内,流程如下
WinHttpOpen函数-返回winhttp-session句柄
https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpopen
WINHTTPAPI HINTERNET WinHttpOpen(
LPCWSTR pszAgentW,
DWORD dwAccessType,
LPCWSTR pszProxyW,
LPCWSTR pszProxyBypassW,
DWORD dwFlags
);
pszAgentW:指向字符串变量的指针,包含调用WinHTTP函数的应用程序或实体的名称,用作用户代理
dwAccessType:设置访问类型,其实就是各种代理的设置
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
WINHTTP_ACCESS_TYPE_NAMED_PROXY
WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY
WINHTTP_ACCESS_TYPE_NO_PROXY 不使用代理进行通讯
pszProxyW:一个指针
当dwAccessType=WINHTTP_ACCESS_TYPE_NAMED_PROXY,仅仅识别HTTP的CERN类型的代理
当dwAccessType!=WINHTTP_ACCESS_TYPE_NAMED_PROXY,此处必须设置WINHTTP_NO_PROXY_NAME
pszProxyBypassW:
当dwAccessType=WINHTTP_ACCESS_TYPE_NAMED_PROXY时,指向不想走代理的IP地址或主机名
当dwAccessType!=WINHTTP_ACCESS_TYPE_NAMED_PROXY,此处必须设置WINHTTP_NO_PROXY_BYPASS
dwFlags:
一般都为0
WinHttpConnect函数--返回链接句柄
WINHTTPAPI HINTERNET WinHttpConnect(
HINTERNET hSession,
LPCWSTR pswzServerName,
INTERNET_PORT nServerPort,
DWORD dwReserved
);
hSession:先前在WinHttpOpen返回的句柄
pswzServerName:指针,指向需要请求的服务器的IP或者主机名
nServerPort:指向目标端口
INTERNET_DEFAULT_HTTP_PORT 80
INTERNET_DEFAULT_HTTPS_PORT 443
INTERNET_DEFAULT_PORT 80&443
dwReserved:保留参数,必须为0!
WinHttpOpenRequest函数-创建http请求句柄
https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpopenrequest
WINHTTPAPI HINTERNET WinHttpOpenRequest(
HINTERNET hConnect,
LPCWSTR pwszVerb,
LPCWSTR pwszObjectName,
LPCWSTR pwszVersion,
LPCWSTR pwszReferrer,
LPCWSTR *ppwszAcceptTypes,
DWORD dwFlags
);
hConnect:WinHttpConnect返回的句柄
pwszVerb:指定要用的方法,如果未NULL则使用GET,此处方法必须全部为大写字母!
pwszObjectName:资源名称,目标文件名
pwszVersion:http版本,如果未NULL则使用HTTP /1.1
pwszReferrer:常规使用设置WINHTTP_NO_REFERER即可
ppwszAcceptTypes:指定客户端接受的媒体类型可设置WINHTTP_DEFAULT_ACCEPT_TYPES
dwFlags:通常为0
WinHttpAddRequestHeaders函数-设置http头
https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpaddrequestheaders
BOOLAPI WinHttpAddRequestHeaders(
HINTERNET hRequest,
LPCWSTR lpszHeaders,
DWORD dwHeadersLength,
DWORD dwModifiers
);
hRequest:WinHttpOpenRequest返回的句柄
lpszHeaders:包含了要附加到http请求上的头部信息,每个头部之间用 回车/换行 (CR/LF) 隔开
dwHeadersLength:头部的长度
dwModifiers:修饰作用,可以直接设定为WINHTTP_ADDREQ_FLAG_ADD
WinHttpSendRequest函数-发送http请求
BOOLAPI WinHttpSendRequest(
HINTERNET hRequest,
LPCWSTR lpszHeaders,
DWORD dwHeadersLength,
LPVOID lpOptional,
DWORD dwOptionalLength,
DWORD dwTotalLength,
DWORD_PTR dwContext
);
hRequest;WinHttpOpenRequest返回的句柄
lpszHeaders:附加的http头,没有要附加的设置0即可,也可WINHTTP_NO_ADDITIONAL_HEADERS
dwHeadersLength:指定头的字符串大小
lpOptional:指向缓冲区的指针,包含要在请求标头之后立即发送的任何可选数据,常用于POST和PUT,如果没有要发送的可以设置为WINHTTP_NO_REQUEST_DATA
dwOptionalLength:额外内容的长度
dwTotalLength:总长度
dwContext:通常为0
WinHttpReceiveResponse函数-等待http回应
WINHTTPAPI BOOL WinHttpReceiveResponse(
HINTERNET hRequest,
LPVOID lpReserved
);
hRequest:WinHttpSendRequest返回的句柄
lpReserved:保留参数设置NULL即可
此处如果有回应则会返回TRUE
WinHttpQueryDataAvailable函数-返回http回应内容的信息
BOOLAPI WinHttpQueryDataAvailable(
HINTERNET hRequest,
LPDWORD lpdwNumberOfBytesAvailable
);
hRequest:返回WinHttpOpenRequest句柄,此处句柄调用WinHttpReceiveResponse
lpdwNumberOfBytesAvailable:务必设置NULL,用来接收内容长度
WinHttpReadData函数-获得http回应内容的信息
BOOLAPI WinHttpReadData(
HINTERNET hRequest,
LPVOID lpBuffer,
DWORD dwNumberOfBytesToRead,
LPDWORD lpdwNumberOfBytesRead
);
hRequest:返回WinHttpOpenRequest句柄
lpBuffer:指定存放数据的缓存区
dwNumberOfBytesToRead:缓存区大小长度
lpdwNumberOfBytesRead:始终设置NULL即可
联系邮箱:yang_s1r@163.com
博客园地址:https://www.cnblogs.com/Yang34/