CommonC++ 应用之二:使用Get访问HTTP服务器

本文演示了如何使用Common C++库中的myURLStream类发起HTTP GET请求以获取天气信息。通过继承URLStream并覆盖httpHeader方法来自定义HTTP头部处理方式。此示例展示了从特定URL读取数据的过程,并提供了错误处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自 guocongbin.blogspot.com

// Copyright (C) 2001 Open Source Telecom Corporation.
//  
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software 
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// 
// As a special exception to the GNU General Public License, permission is 
// granted for additional uses of the text contained in its release 
// of Common C++.
// 
// The exception is that, if you link the Common C++ library with other
// files to produce an executable, this does not by itself cause the
// resulting executable to be covered by the GNU General Public License.
// Your use of that executable is in no way restricted on account of
// linking the Common C++ library code into it.
//
// This exception does not however invalidate any other reasons why
// the executable file might be covered by the GNU General Public License.
//
// This exception applies only to the code released under the 
// name Common C++.  If you copy code from other releases into a copy of
// Common C++, as the General Public License permits, the exception does
// not apply to the code that you add in this way.  To avoid misleading
// anyone as to the status of such modified files, you must delete
// this exception notice from them.
// 
// If you write modifications of your own for Common C++, it is your choice
// whether to permit this exception to apply to your modifications.
// If you do not wish that, delete this exception notice.

#include 
<cc++/common.h>
#include 
<iostream>
#include 
<cstdlib>

#ifdef  CCXX_NAMESPACES
using namespace std;
using namespace ost;
#endif

class myURLStream : public URLStream
{
    
private:
        
void httpHeader(const char *header, const char *value) 
        {       
            cout 
<< "HEADER " << header << "=" << value << endl;
        }       
};
int main(int argc, char **argv)
{
    myURLStream url;
    
char cbuf[1024];
    URLStream::Error status;
    
int len;

    
const char* addr = "http://www.webservicex.net/globalweather.asmx/GetWeather?CityName=beijing&CountryName=china";
#ifdef  CCXX_EXCEPTIONS
    
try
    {
#endif
        status 
= url.get(addr);
        
if(status)
        {
            cout 
<< "failed; reason=" << status << endl;
            url.close();
        }
        
else{
            cout 
<< "loading..." << endl;
            
while(!url.eof())
            {
                url.read(cbuf, sizeof(cbuf));
                len 
= url.gcount();
                
if(len > 0)
                    cout.write(cbuf, len);
            }
            url.close();
            cout 
<< ends;
        }
#ifdef  CCXX_EXCEPTIONS
    }
    
catch(...)
    {
        cerr 
<< "url " << addr << " failed" << endl;
    }
#endif
    
return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值