前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFXHTTPConnection
HTTP / HTTPS 通信のためのクラスです。
#include <SFXHTTPConnection.h.hpp>
class SFXHTTPConnection;
SFMTYPEDEFCLASS(SFXHTTPConnection)

協調図

SFXHTTPConnection クラスの協調図

解説

SFXHTTPConnection クラスは NTT ドコモの携帯 Java アプレット開発環境 DoJa に実装されている、com.nttdocomo.io.HttpConnection クラスに似た HTTP / HTTPS 通信機能を提供します。

[Note] 注意
SFXHTTPConnection クラスは BREW API の IWeb / IWebResp / IX509Chain インターフェースを利用して実装されています。

HTTP / HTTPS 通信の手順

  1. SFXHTTPConnection クラスのインスタンスを作成します。
  2. SFXHTTPConnection::Open 関数を呼び出して、HTTP / HTTPS 接続をオープンします。
  3. SFXHTTPConnection::SetMethod 関数を呼び出して、HTTP リクエスト メソッドを設定します。(デフォルト: GET メソッド) SFXHTTPConnection::GetStreamWriter 関数で出力ストリームを取得しリクエスト ボディにデータを書き込みます。 (※ SFXHTTPConnection::SetRequestHeader 関数でリクエスト ヘッダーを設定することも可能です。)
  4. HTTPS 接続の場合、 SFXHTTPConnection::SetTrustMode 関数を呼び出して、検証モードを設定します。(デフォルト: SSL_TRUST_MODE_FAIL )
  5. SFXHTTPConnection::Connect 関数を呼び出して、Web サーバーに接続します。 接続する URL と、Web サーバーへの接続の通知を受け取るコールバック関数を登録します。
  6. Web サーバーへの接続の通知を受け取ると、SFXHTTPConnection::Connect 関数で登録したコールバック関数が呼び出されます。 ( Web サーバーへの接続の結果(エラー コード)は、コールバック関数の第 1 引数に渡されます。 エラー コードが SFERR_NO_ERROR であれば、Web サーバーへの接続に成功し、HTTP レスポンスを取得しています。)
  7. SFXHTTPConnection::GetResultCode 関数で HTTP ステータス コードを取得し、その内容を確認してから、 SFXHTTPConnection::GetStreamReader 関数で入力ストリームを取得してレスポンス ボディを読み取ります。 (※ SFXHTTPConnection::GetResponseHeader 関数でレスポンス ヘッダーの内容を取得することも可能です。)
  8. 2. から 7. のデータ送受信処理を繰り返します。
  9. 最後に、SFXHTTPConnection::Close 関数を呼び出して、HTTP / HTTPS 接続をクローズします。

例 750. HTTP / HTTPS 通信の手順

// SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
    SFXAnsiStringStreamReader _reader;
    SFXAnsiString _receivedString;
public:
    Void Start(Void);
    CALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect)
    CALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch)
};

Void MyClass::Start(Void)
{
    SFCError error(SFERR_NO_ERROR);

    // HTTP 接続の初期化を行う
    if ((error = _http.Open()) == SFERR_NO_ERROR) {
    
        // HTTP リクエスト メソッドを "GET" に設定する
        // 設定省略時は "GET" となる
        _http.SetMethod("GET");

        // 接続を開始する
#if 1
        // HTTP 接続の場合
        // Web サーバーに接続する。接続の完了は、OnConnect 関数に通知される 
        if ((error = _http.Connect("http://www.example.com/",
                         CALLBACK_FUNCTION(OnConnect))) == SFERR_NO_ERROR) {
#else
        // HTTPS 接続の場合
        // 必要に応じて検証モードを設定する
        _http.SetTrustMode(SSL_TRUST_MODE_FAIL);
        // Web サーバーに接続する。接続の完了は、OnConnect 関数に通知される 
        if ((error = _http.Connect("https://www.example.com/",
                         CALLBACK_FUNCTION(OnConnect))) == SFERR_NO_ERROR) {
#endif
            ...
        }
    }

    if (error != SFERR_NO_ERROR) {
        // エラーが発生したとき
        _http.Close();
    }
    return;
}

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    SFXPropertyConstPtr header;
    SInt16 i;

    if (error == SFERR_NO_ERROR) {
        
        // 各種パラメータを表示する

        // HTTP ステータス コードを取得する
        TRACE("result code = %d", _http.GetResultCode());
        // HTTP レスポンス ヘッダーの Content-Length フィールドを取得する
        TRACE("content length = %d", _http.GetLength()); 
        // HTTP レスポンス ヘッダーの Content-Type フィールドを取得する
        TRACE("content type = %s", _http.GetType().GetCString());
        // HTTP レスポンス ヘッダーの Content-Encoding フィールドを取得する
        TRACE("content encoding = %s", _http.GetEncoding().GetCString());
        // HTTP レスポンス ヘッダーの Date フィールドを取得する
        TRACE("date = %s", _http.GetDate().Format("YYYY/MM/DD hh:mm:ss").GetCString());
        // HTTP レスポンス ヘッダーの Expires フィールドを取得する
        TRACE("expires = %s", _http.GetExpires().Format("YYYY/MM/DD hh:mm:ss").GetCString());
        // HTTP レスポンス ヘッダーの Last-Modified フィールドを取得する
        TRACE("last modified = %s", _http.GetLastModified().Format("YYYY/MM/DD hh:mm:ss").GetCString());

        
        // HTTP レスポンス ヘッダーを取得する
        header = &_http.GetResponseHeader();
        
        // HTTP レスポンス ヘッダーをすべて表示する
        for (i = 0; i < header->GetSize(); ++i) {
            TRACE("%s: %s", header->GetKey(i).GetCString(), header->GetValue(i).GetCString());
        }

        if (_http.GetResultCode() == 200) {

            // データ受信用ストリームを取得する
            if ((error = _http.GetStreamReader(1024, &_reader))
                == SFERR_NO_ERROR) {

                // データを受信する。データ受信の完了は、OnFetch 関数に通知される
                if ((error = _reader.Fetch(CALLBACK_FUNCTION(OnFetch)))
                    == SFERR_NO_ERROR) {
                    ...
                }
            }
        }
        else {
            error = SFERR_INVALID_STATE;
        }
    }

    if (error != SFERR_NO_ERROR) {
        // エラーが発生したとき
       _http.Close();
    }
    return;
}

// データ受信の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error)
{
    SFXAnsiString string;

    if (error == SFERR_NO_ERROR) {

        // データ受信用ストリームからデータを取得する
        if ((error = _reader.ReadSFXAnsiString(&string)) == SFERR_NO_ERROR) {

            // 断片化されたデータを結合する
            if ((error = _receivedString.Add(string)) == SFERR_NO_ERROR) {

                // 残りのデータをチェックする
                if (_reader.Ends()) {

                    // すべてのデータが受信できたので表示する
                    TRACE("--------");
                    TRACE("%s", _receivedString.GetCString());
                    TRACE("--------");

                    // 明示的にリソースを解放する
                    _reader.Release();
                    _http.Close();
                }
                else {

                    // データを受信する。データ受信の完了は、OnFetch 関数に通知される
                    error = _reader.Fetch(CALLBACK_FUNCTION(OnFetch));
                }
            }
        }
    }

    if (error != SFERR_NO_ERROR) {
        // エラーが発生したとき
        _reader.Release();
        _http.Close();
    }
    return;
}

制限事項

BREW 2.0 では IWeb インターフェースの制限により、1536 バイト以上のデータを送信できません。

BREW 2.1 では IWeb インターフェースの制限により、64K バイト以上のデータを送信できません。

参照

BREW API IWeb | BREW API IWebResp | BREW API IX509Chain | SFXTCPSocket | HTTP 接続

メンバ

コンストラクタ/デストラクタ
SFXHTTPConnection( Void )
SFXHTTPConnection クラスのコンストラクタです。
~SFXHTTPConnection( Void )
SFXHTTPConnection クラスのデストラクタです。
パブリック関数
Void Cancel( Void )
HTTP / HTTPS 通信をキャンセルします。
SFCError Clear( Void )
内部変数を初期化します。
Void Close( Void )
HTTP 接続をクローズします。
SFCError Connect( SFXAnsiStringConstRef url , CallbackSPP spp , VoidPtr reference )
Web サーバーに接続します。
SFXDate GetDate( Void )
HTTP レスポンス ヘッダーの Date フィールドを取得します。
SFXAnsiStringConstRef GetEncoding( Void )
HTTP レスポンス ヘッダーの Content-Encoding フィールドを取得します。
SFXDate GetExpires( Void )
HTTP レスポンス ヘッダーの Expires フィールドを取得します。
SFXDate GetLastModified( Void )
HTTP レスポンス ヘッダーの Last-Modified フィールドを取得します。
SInt32 GetLength( Void )
HTTP レスポンス ヘッダーの Content-Length フィールドを取得します。
SFXAnsiStringConstRef GetMethod( Void )
HTTP リクエスト メソッドを取得します。
SFXSocketAddressConstRef GetProxyServer( Void )
プロキシ サーバーを取得します。
SFBSourceSmpConstRef GetRequestContent( Void )
送信データを管理する SFBSource クラスのインスタンスを取得します。
UInt32 GetRequestFlag( Void )
HTTP リクエスト フラグを取得します。
SFXAnsiStringConstRef GetRequestHeader( SFXAnsiStringConstRef key )
HTTP リクエスト ヘッダーを取得します。
SFXPropertyConstRef GetRequestHeader( Void )
HTTP リクエスト ヘッダーを取得します。
SFBSourceSmpConstRef GetResponseContent( Void )
受信データを管理する SFBSource クラスのインスタンスを取得します。
UInt32 GetResponseFlag( Void )
HTTP レスポンス フラグを取得します。
SFXAnsiStringConstRef GetResponseHeader( SFXAnsiStringConstRef key )
HTTP レスポンス ヘッダーを取得します。
SFXPropertyConstRef GetResponseHeader( Void )
HTTP レスポンス ヘッダーを取得します。
SInt32 GetResultCode( Void )
HTTP ステータス コードを取得します。
SFBWebSmpConstRef GetSFBWeb( Void )
内部で使用する SFBWeb クラスのインスタンスを取得します。
SFBWebRespSmpConstRef GetSFBWebResp( Void )
内部で使用する SFBWebResp クラスのインスタンスを取得します。
SFCError GetStreamReader( UInt32 size , SFXStreamReaderPtr result )
GetStreamReader( SFXStreamReaderPtr result )
データ受信用ストリームを取得します。
SFCError GetStreamWriter( UInt32 size , SFXStreamWriterPtr result )
GetStreamWriter( SFXStreamWriterPtr result )
データ送信用ストリームを取得します。
UInt32 GetTrustMode( Void )
SSL 検証モードを取得します。
SFXAnsiStringConstRef GetType( Void )
HTTP レスポンス ヘッダーの Content-Type フィールドを取得します。
SFXAnsiStringConstRef GetUserAgent( Void )
ユーザー エージェントを取得します。
SFCError Open( AEECLSID id = AEECLSID_WEB )
HTTP 接続をオープンします。
SFCError SetMethod( SFXAnsiStringConstRef param )
HTTP リクエスト メソッドを設定します。
SFCError SetProxyServer( SFXSocketAddressConstRef param )
プロキシ サーバーを設定します。
SFCError SetRequestContent( SFXStorageConstRef param )
SetRequestContent( SFBSourceSmpConstRef param )
送信データを管理する SFBSource クラスのインスタンスを設定します。
SFCError SetRequestFlag( UInt32 param )
HTTP リクエスト フラグを設定します。
SFCError SetRequestHeader( SFXAnsiStringConstRef key , SFXAnsiStringConstRef value )
HTTP リクエスト ヘッダーを設定します。
SFCError SetTrustMode( UInt32 param )
SSL 検証モードを設定します。
SFCError SetUserAgent( SFXAnsiStringConstRef param )
ユーザー エージェントを設定します。
CallbackSPP
コールバック関数のプロトタイプです。

SFXHTTPConnection::SFXHTTPConnection
SFXHTTPConnection クラスのコンストラクタです。
[ public, explicit ]
SFXHTTPConnection(Void);

解説

メンバ変数の初期化を行います。


SFXHTTPConnection::~SFXHTTPConnection
SFXHTTPConnection クラスのデストラクタです。
[ public ]
~SFXHTTPConnection(Void);

解説

オープン状態のときは、 内部で SFXHTTPConnection::Close 関数が呼び出され、リソースは解放されます。


SFXHTTPConnection::Cancel
HTTP / HTTPS 通信をキャンセルします。
[ public ]
Void Cancel(Void);

参照

SFXHTTPConnection::Close


SFXHTTPConnection::Clear
内部変数を初期化します。
[ public ]
SFCError Clear(Void);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

参照

SFXHTTPConnection::Cancel


SFXHTTPConnection::Close
HTTP 接続をクローズします。
[ public ]
Void Close(Void);

解説

Web サーバーとの接続を終了します。内部で使っているリソースをすべて解放します。

参照

SFXHTTPConnection::Cancel


SFXHTTPConnection::Connect
Web サーバーに接続します。
[ public ]
SFCError Connect(
    SFXAnsiStringConstRef url   // 接続する URL
    CallbackSPP spp             // コールバック関数
    VoidPtr reference           // コールバック関数に渡すデータ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

解説

前回の接続で取得した HTTP レスポンス ヘッダーや SFXHTTPConnection::GetStreamReader 関数、SFXHTTPConnection::GetStreamWriter 関数で取得したストリームは破棄します。

[Caution] 接続時のエラー取得

接続に関するエラーは戻り値では取得できず、コールバックを通じて通知されます。

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
public:
    Void Start(Void);                               // HTTP 接続を開始する
    CALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect)   // コールバック関数の宣言
};

// HTTP 接続を開始する
Void MyClass::Start(Void)
{
    SFCError error(SFERR_NO_ERROR);

    if ((error = _http.Open()) == SFERR_NO_ERROR) {   // HTTP 接続の初期化を行う
    
        _http.SetMethod("GET");  // HTTP リクエスト メソッドを "GET" に設定する

        // 接続を開始する
        if ((error = _http.Connect("http://www.example.com/",
                         CALLBACK_FUNCTION(OnConnect))) == SFERR_NO_ERROR) {
           ...
        }else{
            _http.Close();  // エラーが起きたので、接続を閉じる
        }
        
    }

    if (error != SFERR_NO_ERROR) {  // エラーが発生したとき
        ...
    }
    return;
}
// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {
        ...
    }
}

参照

SFXHTTPConnection::Open


SFXHTTPConnection::GetDate
HTTP レスポンス ヘッダーの Date フィールドを取得します。
[ public, const ]
SFXDate GetDate(Void);

戻り値

HTTP レスポンス ヘッダーの Date フィールドの値を解析し、SFXDate クラスのインスタンスを返します。

HTTP レスポンス ヘッダーに Date フィールドが存在しない場合は 0 ( SFXDate クラスを 0 で初期化して生成したインスタンス ) を返します。

解説

SFXHTTPConnection::GetDate 関数は、日時を 1980 年 1 月 6 日 00:00:00 ( GMT ) からの秒数で返します。 この形式の日時表現は、BREW ヘルパー関数の GETJULIANDATE 関数や GETTIMESECONDS 関数で処理します。

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーの Date フィールドを取得する 
        TRACE("date = %s", _http.GetDate().Format("YYYY/MM/DD hh:mm:ss").GetCString());
        ...
    }
}

SFXHTTPConnection::GetEncoding
HTTP レスポンス ヘッダーの Content-Encoding フィールドを取得します。
[ public, const ]
SFXAnsiStringConstRef GetEncoding(Void);

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーの Content-Encoding フィールドを取得する
        TRACE("content encoding = %s", _http.GetEncoding().GetCString()); 
        ...
    }
}

SFXHTTPConnection::GetExpires
HTTP レスポンス ヘッダーの Expires フィールドを取得します。
[ public, const ]
SFXDate GetExpires(Void);

戻り値

HTTP レスポンス ヘッダーの Expires フィールドの値を解析し、SFXDate クラスのインスタンスを返します。

HTTP レスポンス ヘッダーに Expires フィールドが存在しない場合は 0 ( SFXDate クラスを 0 で初期化して生成したインスタンス ) を返します。

解説

SFXHTTPConnection::GetExpires 関数は、日時を 1980 年 1 月 6 日 00:00:00 ( GMT ) からの秒数で返します。 この形式の日時表現は、BREW ヘルパー関数の GETJULIANDATE 関数や GETTIMESECONDS 関数で処理します。

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーに Expires フィールドを取得する
        TRACE("expires = %s", _http.GetExpires().Format("YYYY/MM/DD hh:mm:ss").GetCString());
        ...
    }
}

SFXHTTPConnection::GetLastModified
HTTP レスポンス ヘッダーの Last-Modified フィールドを取得します。
[ public, const ]
SFXDate GetLastModified(Void);

戻り値

HTTP レスポンス ヘッダーの Last-Modified フィールドの値を解析し、SFXDate クラスのインスタンスを返します。

HTTP レスポンス ヘッダーに Last-Modified フィールドが存在しない場合は 0 ( SFXDate クラスを 0 で初期化して生成したインスタンス ) を返します。

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーの Last-Modified フィールドを取得する
        TRACE("last modified = %s", _http.GetLastModified().Format("YYYY/MM/DD hh:mm:ss").GetCString());
        ...
    }
}

SFXHTTPConnection::GetLength
HTTP レスポンス ヘッダーの Content-Length フィールドを取得します。
[ public, const ]
SInt32 GetLength(Void);

戻り値

HTTP レスポンス ヘッダーの Content-Length フィールドの値を返します。取得に失敗すると -1 を返します。

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーの Content-Length フィールドを取得する
        TRACE("content length = %d", _http.GetLength());
        ...
    }
}

SFXHTTPConnection::GetMethod
HTTP リクエスト メソッドを取得します。
[ public, const ]
SFXAnsiStringConstRef GetMethod(Void);

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP リクエスト メソッドを取得する
        TRACE("method = %s", _http.GetMethod().GetCString());
        ...
    }
}

参照

SFXHTTPConnection::SetMethod


SFXHTTPConnection::GetProxyServer
プロキシ サーバーを取得します。
[ public, const ]
SFXSocketAddressConstRef GetProxyServer(Void);

解説

プロキシ サーバーを SFXSocketAddress 形式で取得します。

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // プロキシ サーバーを取得する
        TRACE("method = %s", _http.GetProxyServer().Get().GetCString());
        ...
    }
}

参照

SFXHTTPConnection::SetProxyServer


SFXHTTPConnection::GetRequestContent
送信データを管理する SFBSource クラスのインスタンスを取得します。
[ public, const ]
SFBSourceSmpConstRef GetRequestContent(Void);

解説

[Caution] 注意

SFXHTTPConnection::GetRequestContent 関数を利用する場合は、SFXHTTPConnection::GetStreamWriter 関数、 SFXHTTPConnection::GetStreamReader 関数は使えません。

参照

SFXHTTPConnection::SetRequestContent


SFXHTTPConnection::GetRequestFlag
HTTP リクエスト フラグを取得します。
[ public, const ]
UInt32 GetRequestFlag(Void);

戻り値

HTTP リクエストの詳細条件を以下のフラグの論理和として取得できます。

  • WEBREQUEST_REDIRECT:リダイレクトを自動的に処理します。(未実装)
  • WEBREQUEST_NOCOOKIES:クッキーを処理せずに、ヘッダをそのまま渡します。(未実装)
  • WEBREQUEST_NOCACHE:プロキシを使用する場合に、"Pragma: no-cache" を送信します。(未実装)
  • WEBREQUEST_NOKEEPALIVE:キープ アライブを無効にします。
  • WEBREQUEST_FORCENEWCONN:新規接続を強制します。
  • WEBREQUEST_NOWAITCONN:再利用可能な接続を待たずに、新規接続を行います。
  • WEBREQUEST_HTTPBOGUSCRLF:CERN Webserver のバグを回避するために、余分な CRLF を追加します。

解説

SFXHTTPConnection::GetRequestFlag 関数は、通信時に内部で利用される IWEB_GetResponse 関数に渡される、通信の詳細設定を返します。

参照

BREW API IWEB_GetResponse | SFXHTTPConnection::SetRequestFlag


SFXHTTPConnection::GetRequestHeader
HTTP リクエスト ヘッダーを取得します。
[ public, const ]
SFXAnsiStringConstRef GetRequestHeader(
    SFXAnsiStringConstRef key   // フィールド名
);
[ public, const ]
SFXPropertyConstRef GetRequestHeader(Void);

戻り値

接続が確立されていない場合は空文字列、空のプロパティを返します。

参照

SFXHTTPConnection::SetRequestHeader


SFXHTTPConnection::GetResponseContent
受信データを管理する SFBSource クラスのインスタンスを取得します。
[ public, const ]
SFBSourceSmpConstRef GetResponseContent(Void);

解説

[Caution] 注意

SFXHTTPConnection::GetResponseContent 関数を利用する場合は、SFXHTTPConnection::GetStreamWriter 関数、SFXHTTPConnection::GetStreamReader 関数は使用えません。


SFXHTTPConnection::GetResponseFlag
HTTP レスポンス フラグを取得します。
[ public, const ]
UInt32 GetResponseFlag(Void);

戻り値

HTTP レスポンスの受信処理の詳細が以下のフラグの論理和として取得できます。

  • WEBRESPONSE_REDIRECTED : IWeb インターフェースによりリダイレクトされました。BREW 2.1 では実装されていません。
  • WEBRESPONSE_COOKIES : HTTP リクエストでクッキーを送信しました。BREW 2.1 では実装されていません。
  • WEBRESPONSE_CACHED : ローカル キャッシュにからデータを取得しました。ネットワーク通信は行っていません。BREW 2.1 では実装されていません。
  • WEBRESPONSE_KEEPALIVE : 接続はキープ アライブ状態にあります。
  • WEBRESPONSE_HTTP09 : HTTP 0.9 のレスポンスを受信しました。ヘッダーがありません。ステータス コード 200 として処理しました。
  • WEBRESPONSE_LOCAL : ローカルで生成されたコンテンツです。ネットワーク通信は行っていません。
  • WEBRESPONSE_PROXIED : プロキシ経由でデータを受信しました。
  • WEBRESPONSE_AUTHBASIC : BASIC 認証のための情報を送信しました。BREW 2.1 では実装されていません。

解説

SFXHTTPConnection::GetResponseFlag 関数は、内部で使っている IWebResp インターフェースに対して、 WEBOPT_FLAGS を指定して IWEBRESP_GetOpt 関数を呼び出して取得した値を返します。

参照

BREW API IWEBRESP_GetOpt | SFXHTTPConnection::SetRequestFlag


SFXHTTPConnection::GetResponseHeader
HTTP レスポンス ヘッダーを取得します。
[ public, const ]
SFXAnsiStringConstRef GetResponseHeader(
    SFXAnsiStringConstRef key   // フィールド名
);
[ public, const ]
SFXPropertyConstRef GetResponseHeader(Void);

戻り値

接続が確立されていない場合は空文字列、空のプロパティを返します。

使用例

// 接続が完了すると呼び出されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    SFXPropertyConstPtr header;
    SInt16 i;

    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーを取得する
        header = &_http.GetResponseHeader(); 
        
        // HTTP レスポンス ヘッダーをすべて表示する
        for (i = 0; i < header->GetSize(); ++i) {
            TRACE("%s: %s", header->GetKey(i).GetCString(), header->GetValue(i).GetCString());
        }
    }
}

SFXHTTPConnection::GetResultCode
HTTP ステータス コードを取得します。
[ public, const ]
SInt32 GetResultCode(Void);

戻り値

HTTP ステータス コードを返します。接続が確立されていない場合は -1 を返します。

解説

GetResultCode の値は、BREW API WebRespInfo のフィールド nCode と同じく、通信エラーのときはエラー内容を負にした値を返します。

戻り値を WEB_ERROR_MAP() に渡すことによって、BREW のエラーコードを取得できます。

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {
        ...
        if (_http.GetResultCode() == 200) { 
        // HTTP ステータス コードが 200 ( 成功 ) の場合
            ...
        }
    }
}

SFXHTTPConnection::GetSFBWeb
内部で使用する SFBWeb クラスのインスタンスを取得します。
[ public, const ]
SFBWebSmpConstRef GetSFBWeb(Void);

参照

SFXHTTPConnection::GetSFBWebResp


SFXHTTPConnection::GetSFBWebResp
内部で使用する SFBWebResp クラスのインスタンスを取得します。
[ public, const ]
SFBWebRespSmpConstRef GetSFBWebResp(Void);

参照

SFXHTTPConnection::GetSFBWeb


SFXHTTPConnection::GetStreamReader
データ受信用ストリームを取得します。
[ public ]
SFCError GetStreamReader(
    UInt32 size                 // バッファ サイズ
    SFXStreamReaderPtr result   // データ受信用ストリームへのポインタ
);
[ public ]
SFCError GetStreamReader(
    SFXStreamReaderPtr result   // データ受信用ストリームへのポインタ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

データ受信用ストリームのバッファ サイズを指定することも可能です。 データ受信用ストリームは、受信するデータのタイプに応じて SFXBinaryStreamReaderSFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。

[Caution] 注意

SFXHTTPConnection::GetStreamReader 関数を利用する場合は、SFXHTTPConnection::GetRequestContent / SFXHTTPConnection::GetResponseContent / SFXHTTPConnection::SetRequestContent 関数は使えません。

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
    SFXAnsiStringStreamReader _reader;
public:
    Void Start(Void);
    CALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect)
    CALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch)
};

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {
        ...
        // HTTP ステータス コードが 200 ( 成功 ) の場合
        if (_http.GetResultCode() == 200) {

            // データ受信用ストリームを取得する
            if ((error = _http.GetStreamReader(1024, &_reader)) == SFERR_NO_ERROR) {

                // データ受信用ストリームからデータを受信する
                if ((error = _reader.Fetch(CALLBACK_FUNCTION(OnFetch))) == SFERR_NO_ERROR) {
                    ...
                }
            }
        }
        else {
            error = SFERR_INVALID_STATE;
        }
    }

    if (error != SFERR_NO_ERROR) {
        // エラーが発生したとき
       _http.Close();
    }
    return;
}
// 新しいデータを受信すると呼び出されるコールバック関数
CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error)
{
    if (error == SFERR_NO_ERROR) {
        ...
    }
}

参照

SFXHTTPConnection::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader


SFXHTTPConnection::GetStreamWriter
データ送信用ストリームを取得します。
[ public ]
SFCError GetStreamWriter(
    UInt32 size                 // バッファサイズ
    SFXStreamWriterPtr result   // データ送信用ストリームへのポインタ
);
[ public ]
SFCError GetStreamWriter(
    SFXStreamWriterPtr result   // データ送信用ストリームへのポインタ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

データ送信用ストリームのバッファ サイズを指定することも可能です。 データ送信用ストリームは、送信するデータのタイプに応じて SFXBinaryStreamWriterSFXAnsiStringStreamWriter、または SFXWideStringStreamWriter クラスを使い分けます。

[Caution] 注意

GetStreamWriter 関数を利用する場合は、SFXHTTPConnection::GetRequestContent 関数、SFXHTTPConnection::GetResponseContent 関数、SFXHTTPConnection::SetRequestContent 関数は使えません。

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
public:
    Void Start(Void);
    CALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect)
};

Void MyClass::Start(Void)
{
    SFXAnsiStringStreamWriter writer;
    SFXAnsiString send;
    SFCError error(SFERR_NO_ERROR);

    // HTTP 接続の初期化を行う
    if ((error = _http.Open()) == SFERR_NO_ERROR) {

        // 送信するデータを用意する
        send = "abcdefghijklmnopqrstuvwxyz";

        // データ送信用ストリームを取得する
        if ((error = _http.GetStreamWriter(send.GetLength(), &writer)) == SFERR_NO_ERROR) {

            // データ送信用ストリームにデータを書き込む
            if ((error = writer.WriteSFXAnsiString(send)) == SFERR_NO_ERROR) {

                // データ送信用ストリームをフラッシュする
                if ((error = writer.Flush()) == SFERR_NO_ERROR) {
                    
                    // HTTP リクエスト メソッドを POST に設定する
                    if ((error = _http.SetMethod("POST")) == SFERR_NO_ERROR) {  

                        if ((error = _http.Connect("http://www.example.com", CALLBACK_FUNCTION(OnConnect))) == SFERR_NO_ERROR) {   // 接続を開始する
                            ...
                        }
                    }
                }
            }
        }
    }

    if (error != SFERR_NO_ERROR) {  
       // エラーが発生したとき
       _http.Close();
    }
    return;
}

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {
        ....
    }
    return;
}

参照

SFXHTTPConnection::GetStreamReader | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter


SFXHTTPConnection::GetTrustMode
SSL 検証モードを取得します。
[ public, const ]
UInt32 GetTrustMode(Void);

解説

SSL 検証モードとして、以下の値を取得します。

  • SSL_TRUST_MODE_FAIL
  • SSL_TRUST_MODE_CHECK
  • SSL_TRUST_MODE_IGNORE
  • SSL_TRUST_MODE_ALWAYS

詳細情報 : 「 BREW API リファレンス 」の ISSL_NegotiateV

参照

BREW API ISSL_NegotiateV | SFXHTTPConnection::SetTrustMode


SFXHTTPConnection::GetType
HTTP レスポンス ヘッダーの Content-Type フィールドを取得します。
[ public, const ]
SFXAnsiStringConstRef GetType(Void);

使用例

// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        // HTTP レスポンス ヘッダーの Content-Type フィールドを取得する
        TRACE("content type = %s", _http.GetType().GetCString());
        ...
    }
}

SFXHTTPConnection::GetUserAgent
ユーザー エージェントを取得します。
[ public, const ]
SFXAnsiStringConstRef GetUserAgent(Void);

参照

SFXHTTPConnection::SetUserAgent


SFXHTTPConnection::Open
HTTP 接続をオープンします。
[ public ]
SFCError Open(
    AEECLSID id = AEECLSID_WEB   // ClassID
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が既に確立しているとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

解説

HTTP 接続の初期化を行います。内部で SFBWeb クラスのインスタンスを生成します。

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
public:
    Void Start(Void);
};

// HTTP 接続を開始する
Void MyClass::Start(Void)
{
    SFCError error(SFERR_NO_ERROR);

    // HTTP 接続の初期化を行う
    if ((error = _http.Open()) == SFERR_NO_ERROR) {
        ...
    }

    if (error != SFERR_NO_ERROR) {
        // エラーが発生したとき
        ...
    }
    return;
}

参照

SFXHTTPConnection::Connect


SFXHTTPConnection::SetMethod
HTTP リクエスト メソッドを設定します。
[ public ]
SFCError SetMethod(
    SFXAnsiStringConstRef param   // メソッド文字列
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

ここで設定された値は SFXHTTPConnection::Close されるまで有効です。

SFXHTTPConnection::SetMethod 関数は、BREW の IWeb インターフェースが対応しているものしか使えません。 "GET"、"POST"、"HEAD" などが使えます。

HTTP リクエスト メソッドの設定を省略した場合は、"GET" メソッドが使われます。

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
public:
    Void Start(Void);
};

// HTTP 接続を開始する
Void MyClass::Start(Void)
{
    SFCError error(SFERR_NO_ERROR);

    // HTTP 接続の初期化を行う
    if ((error = _http.Open()) == SFERR_NO_ERROR) {

        // HTTP リクエスト メソッドを "GET" に設定する
        _http.SetMethod("GET");
        ...
    }

    if (error != SFERR_NO_ERROR) {
        // エラーが発生したとき
        ...
    }
    return;
}

参照

SFXHTTPConnection::GetMethod


SFXHTTPConnection::SetProxyServer
プロキシ サーバーを設定します。
[ public ]
SFCError SetProxyServer(
    SFXSocketAddressConstRef param   // プロキシ サーバー
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

プロキシ サーバーを SFXSocketAddress 形式で設定します。

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
public:
    Void Start(Void); 
};

// HTTP 接続を開始する
Void MyClass::Start(Void)
{
    SFCError error(SFERR_NO_ERROR);

    // HTTP 接続の初期化を行う
    if ((error = _http.Open()) == SFERR_NO_ERROR) {

        // プロキシ サーバーを設定する
        error = _http.SetProxyServer(SFXSocketAddress("exampleproxy.co.jp:8080"));;
        ...
    }

    if (error != SFERR_NO_ERROR) {  
        // エラーが発生したとき
        ...
    }
    return;
}

参照

SFXHTTPConnection::GetProxyServer


SFXHTTPConnection::SetRequestContent
送信データを管理する SFBSource クラスのインスタンスを設定します。
[ public ]
SFCError SetRequestContent(
    SFXStorageConstRef param   // 送信データのストレージ
);
[ public ]
SFCError SetRequestContent(
    SFBSourceSmpConstRef param   // 送信データの SFBSource クラスのインスタンス
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

[Caution] 注意

SFXHTTPConnection::SetRequestContent 関数を利用する場合は、SFXHTTPConnection::GetStreamWriter / SFXHTTPConnection::GetStreamReader 関数は使えません。

参照

SFXHTTPConnection::GetRequestContent


SFXHTTPConnection::SetRequestFlag
HTTP リクエスト フラグを設定します。
[ public ]
SFCError SetRequestFlag(
    UInt32 param   // フラグ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE

参照

SFXHTTPConnection::GetRequestFlag


SFXHTTPConnection::SetRequestHeader
HTTP リクエスト ヘッダーを設定します。
[ public ]
SFCError SetRequestHeader(
    SFXAnsiStringConstRef key     // ヘッダーの名前
    SFXAnsiStringConstRef value   // ヘッダーの値
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ヘッダーの名前が User-Agent 、Content-Length 、Connection のいずれかであったとき:SFERR_INVALID_PARAM
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

同一の key で複数回呼ばれた場合は、すべて記憶してリクエスト時に送信されます。

設定された値は SFXHTTPConnection::Close 関数を呼び出したとき、あるいは Web サーバーに接続したときに破棄されます。

参照

SFXHTTPConnection::GetRequestHeader


SFXHTTPConnection::SetTrustMode
SSL 検証モードを設定します。
[ public ]
SFCError SetTrustMode(
    UInt32 param   // SSL 検証モード
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE

解説

設定された値は SFXHTTPConnection::Close 関数が呼び出されるまで有効です。

実機において、この値を変更した直後の SFXHTTPConnection::Connect 関数の呼び出しでは SSL_RESULT_SERV_VERS エラーが発生することがあります。

エラーを避けるには、一度 SFXHTTPConnection::Close 関数を呼び出してから検証モードを設定し、 SFXHTTPConnection::Connect 関数を呼び出します。 SSL 検証モードとして、以下の値を設定します。

  • SSL_TRUST_MODE_FAIL : デフォルトです。トラストエラーがあると接続が失敗します。
  • SSL_TRUST_MODE_CHECK : トラスト エラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE : すべてのトラスト エラーを無視します。
  • SSL_TRUST_MODE_ALWAYS : トラストをチェックできるように常に中断します。

詳細情報 : 「 BREW API リファレンス 」の ISSL_NegotiateV

使用例

// HTTP / HTTPS 通信に必要な SFXHTTPConnection クラスのインスタンス _http はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXHTTPConnection _http;
public:
    Void Start(Void);   
    CALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect) 
};

// HTTP 接続を開始する
Void MyClass::Start(Void)
{
    SFCError error(SFERR_NO_ERROR);

    // HTTP 接続の初期化を行う
    if ((error = _http.Open()) == SFERR_NO_ERROR) {
    
        // 検証モードを設定する
        _http.SetTrustMode(SSL_TRUST_MODE_FAIL);
        
        // 接続を開始する
        if ((error = _http.Connect("http://www.example.com/",
                         CALLBACK_FUNCTION(OnConnect))) == SFERR_NO_ERROR) {
           ...
        }else{
            // エラーが発生したとき
            _http.Close();
        }
        
    }

    if (error != SFERR_NO_ERROR) {  
        // エラーが発生したとき
        ...
    }
    return;
}
// 接続の完了が通知されるコールバック関数
CALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) {

        ...

    }
}

参照

BREW API ISSL_NegotiateV | SFXHTTPConnection::GetTrustMode | SFXHTTPConnection::Connect | SFXHTTPConnection::Close


SFXHTTPConnection::SetUserAgent
ユーザー エージェントを設定します。
[ public ]
SFCError SetUserAgent(
    SFXAnsiStringConstRef param   // ユーザー エージェント
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 接続が確立されていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

参照

SFXHTTPConnection::GetUserAgent


SFXHTTPConnection::CallbackSPP
コールバック関数のプロトタイプです。
typedef Void(* SFXHTTPConnection::CallbackSPP)(SFCError error, VoidPtr reference)

解説

コールバック関数の型です。

第 1 引数にエラーコード、第 2 引数は SFXHTTPConnection::Connect 関数で指定したパラメーター( 一般に SFXHTTPConnection クラスのインスタンス )が渡されます。

参照

SFXHTTPConnection::Connect