谷歌浏览器的源码分析(28)

系统 1468 0
 

上一次说到使用 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 接收到,并且发送到下一个阶段处理。

 

 

谷歌浏览器的源码分析(28)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论