CLX C++ Libraries
Home >> http

Declaration

template <class Socket>
class basic_http : public Socket;

typedef basic_http<tcp::socket> http;

Overview

http は,指定したホスト名 + パス名に HTTP リクエストを送信して内容を取得するためのクラスです. get() メソッド,および post() メソッドはそれぞれ GET,POST リクエストに対応しています. 取得された内容は,ステータスコード,ヘッダ,本文に分割して記憶します.ユーザは,それぞれ code(),head(),body() メソッドで結果を取得することができます.

Example

example_http.cpp

#include <iostream>
#include "clx/http.h"
#include "clx/uri.h"

int main(int argc, char* argv[]) {
    if (argc < 3) return -1;
    
    try {
        clx::http session(clx::uri::encode(argv[1]), 80);
        session.get(clx::uri::encode(argv[2]));
        
        std::cout << "code: " << session.code() << std::endl;
        std::cout << std::endl;
        
        std::cout << "head" << std::endl;
        std::cout << "--" << std::endl;
        for (clx::http::head_iterator pos = session.head().begin();
            pos != session.head().end(); pos++) {
            std::cout << pos->first << ": " << pos->second << std::endl;
        }
        std::cout << std::endl;
        
        std::cout << "body" << std::endl;
        std::cout << "--" << std::endl;
        std::cout << session.body() << std::endl;
    }
    catch (clx::socket_error& e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    
    return 0;
}
Result
$ ./test clx.cielquis.net /index.html
code: 200

head
--
Accept-Ranges: bytes
Connection: close
Content-Length: 14775
Content-Type: text/html
Date: Fri, 29 Aug 2008 06:14:21 GMT
ETag: "c5fe8e-39b7-48b704e8"
Last-Modified: Thu, 28 Aug 2008 20:04:56 GMT
Server: Apache

body
--
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">

<head>
<meta name="author" content="clown">
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">

<link rel="index" href="index.html">
<link rel="stylesheet" href="style/default.css" type="text/css">

・・・(以下略)・・・

Template Parameters

Socket
ソケットクラスを指定します.

Related Types

typedef char char_type;
typedef std::basic_string<char_type> string_type;
typedef std::map<string_type, string_type> head_type;
typedef typename head_type::iterator head_iterator;
typedef typename head_type::const_iterator const_head_iterator;

Construction and Member Functions

basic_http();
explicit basic_http(const socket_type& cp);
explicit basic_http(const string_type& host, int port = 80);
explicit basic_http(const char_type* host, int port = 80);
virtual ~basic_http();

basic_http& start(const string_type& host, int port = 80);
basic_http& start(const char_type* host, int port = 80);
void finish();

basic_http& request(const string_type& query);
basic_http& request(const char_type* query);
bool response(double timeout = -1.0);

start() メソッドで指定したホストと接続を試みます.request() メソッドは, 引数として指定された文字列を接続したサーバへ送信します.response() メソッドは, request() メソッドで送信した HTTP リクエストに対する応答を受信し,内部変数に記憶します. timeout に0以上の値を指定すると,timeout 秒経過しても応答がない場合 false を返して終了します.

bool head(const string_type& path,
    const head_type& head = head_type(), double timeout = -1.0);
bool head(const char_type* path,
    const head_type& head = head_type(), double timeout = -1.0);

bool get(const string_type& path,
    const head_type& head = head_type(), double timeout = -1.0);
bool get(const char_type* path,
    const head_type& head = head_type(), double timeout = -1.0);

bool post(const string_type& path, const string_type& data,
    const head_type& head = head_type(), double timeout = -1.0);
bool post(const char_type* path, const char_type* data,
    const head_type& head = head_type(), double timeout = -1.0);

head(),get(),および post() メソッドは,path で指定された Web ページの内容を取得するための HTTP リクエストを作成した後,request(),response() メソッドを自動的に呼び出します.これらのメソッドは head を指定した場合, 送信する HTTP リクエストに指定されたヘッダ情報を付加します.head は [ヘッダ名,内容] の std::map<std::string, std::string> 形式で指定して下さい.尚, デフォルトの状態では,head(),get() メソッドは Host ヘッダ,pos() メソッドは Host,および Content-Length ヘッダを付加します.

int code() const;
const string_type& message() const;
const head_type& head() const;
head_type& head();
const string_type& body() const;

response() メソッドで取得した内容にアクセスするためのメソッド群です.それぞれ, ステータスコード,ステータスコードに対応する文字列,ヘッダ情報,本文を取得します.

double& version();
double version() const;

HTTP バージョンの内容を設定/取得するためのメソッドです. get(),post() メソッドは,ここで設定された値を基に HTTP リクエストを作成します.

Related Page

  1. CLX C++ Libraries - https

Referrence

  1. Life like a clown - ワイド文字と codecvt