当前位置: 首页>>代码示例>>C++>>正文


C++ HeaderMap::Update方法代码示例

本文整理汇总了C++中HeaderMap::Update方法的典型用法代码示例。如果您正苦于以下问题:C++ HeaderMap::Update方法的具体用法?C++ HeaderMap::Update怎么用?C++ HeaderMap::Update使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在HeaderMap的用法示例。


在下文中一共展示了HeaderMap::Update方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Request

Response ConnectionImpl::Request( const std::string & method, const std::string & url, const HeaderMap & header )
{
	HeaderMap hm;
	hm["Host"] = this->HostName;
	hm["Connection"] = "close";
	hm.Update( header );

	std::ostringstream ossReq( std::ios::binary ); // \r\n を正しく処理するためバイナリとする。
	ossReq << method << " " << url << " HTTP/1.1\r\n" << hm.ToString() << "\r\n" << '\0';

	this->makeConnection();
	this->sendRequest( ossReq.str() );

	std::ostringstream ossResult( std::ios::binary );

	const int BufferSize = 256;
	char buf[BufferSize+1];

	// サーバからヘッダ部を受信
	while( 1 )
	{
		int readSize = this->receive( buf, BufferSize );
		if( readSize > 0 )
		{
			buf[readSize] = '\0';
			std::string bufStr( buf );
			std::string::size_type endOfHeader = bufStr.find( "\r\n\r\n" );
			if( endOfHeader == std::string::npos )
			{
				ossResult.write( buf, readSize );
			}
			else
			{
				ossResult.write( buf, readSize );
				break;
			}
		}
		else if( readSize == 0 )
		{
			break;
		}
		else
		{
			throw CACOON_EXCEPTION( "recv エラー" );
		}
	}
	std::string respHeaderStr = ossResult.str();
	std::string::size_type firstLine = respHeaderStr.find( "\r\n" );
	std::string::size_type lastLine = respHeaderStr.find( "\r\n\r\n" );
	HeaderMap respHeader( respHeaderStr.substr( firstLine + 2, lastLine - firstLine - 2 ) );

	if( respHeader["Transfer-Encoding"] == "chunked" )
	{	// サーバから続きを受信 (chunked バージョン)
		int chunkSize = 0;
		while( 1 )
		{
			int readSize = this->receive( buf, BufferSize );
			if( chunkSize == 0 )
			{
				if( readSize == 0 )
				{
					break;
				}
				buf[readSize-2] = '\0';
				chunkSize = strtol( buf, NULL, 16 );
			}
			else
			{
				if( readSize > 0 )
				{
					ossResult.write( buf, readSize );
					chunkSize -= readSize;
				}
				else if( readSize == 0 )
				{
					break;
				}
				else
				{
					throw CACOON_EXCEPTION( "recv エラー" );
				}
			}
		}
	}
	else
	{	// サーバから続きを受信 (普通)
		while( 1 )
		{
			int readSize = this->receive( buf, BufferSize );
			if( readSize > 0 )
			{
				ossResult.write( buf, readSize );
				break;
			}
			else if( readSize == 0 )
			{
				break;
			}
			else
			{
//.........这里部分代码省略.........
开发者ID:sinsoku,项目名称:cacoon,代码行数:101,代码来源:ConnectionImpl.cpp


注:本文中的HeaderMap::Update方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。