上一次說到使用
WinHTTP
函數來創建
HTTP
連接,并且使用它來發送請求,那么數據接收回來,當然也是從它那里接收的,因此下面來分析它的接收數據的幾個函數,然后再來看看
chrome
里收到數據后發送到那里處理。
在
WinHTTP
里使用
WinHttpOpen
函數來創建
HTTP
連接,然后使用
WinHttpConnect
連接需要下載數據的網站,接著調函數
WinHttpOpenRequest
來創建一個請求,使用函數
WinHttpSendRequest
發送
HTTP
請求,如果有數據發送到服務器,就通過
WinHttpWriteData
函數來發送,最后調用函數
WinHttpReceiveResponse
來查詢狀態碼,
WinHttpQueryDataAvailable
函數查詢可以接收到的數據大小,調用函數
WinHttpQueryHeaders
來查詢傳送回來的
html
頭的大小,調用函數
WinHttpReadData
來接收到
WEB
服務器發送回來的數據。
chrome
就是通過下面的函數來實現數據接收的,如下:
#001
?
void HttpTransactionWinHttp::HandleStatusCallback(DWORD status,
#002
???????????????????????????????????????????????????
DWORD_PTR result,
#003
???????????????????????????????????????????????????
DWORD error,
#004
???????????????????????????????????????????????????
DWORD secure_failure) {
#005
???
int rv = ERR_FAILED;
#006
?
#007
???
switch (status) {
#008
?????
case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR:
#009
???????
rv = DidReceiveError(error, secure_failure);
#010
???????
break;
#011
?????
case WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE:
#012
???????
PopulateSSLInfo(secure_failure);
#013
???????
rv = DidSendRequest();
#014
???????
break;
#015
?????
case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE:
#016
???????
rv = DidWriteData(static_cast<DWORD>(result));
#017
???????
break;
接收到
HTTP
協議頭的數據 。
#018
?????
case WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE:
#019
???????
rv = DidReceiveHeaders();
#020
???????
break;
接收
HTTP
協議的數據 。
#021
?????
case WINHTTP_CALLBACK_STATUS_READ_COMPLETE:
#022
???????
rv = DidReadData(static_cast<DWORD>(result));
#023
???????
break;
#024
?????
default:
#025
???????
NOTREACHED() << "unexpected status code";
#026
???
}
#027
?
#028
???
if (rv == ERR_IO_PENDING) {
#029
?????
session_callback_->AddRef();
?
// balanced when callback runs.
#030
???
} else if (callback_) {
#031
?????
DoCallback(rv);
#032
???
}
#033
?
}
通過上面的分析知道數據怎么樣從
WinHTTP
接收到,并且發送到下一個階段處理。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
