SophiaFramework UNIVERSE 5.3 |
SFXHTTPConnection クラスは、 NTT ドコモの携帯 Java アプリ開発環境 DoJa に実装されている、 com.nttdocomo.io.HttpConnection クラスに似た HTTP 通信機能を提供します(HTTPS 通信にも対応しています)。
注意 | |
---|---|
SFXHTTPConnection クラスは、 BREW API の IWeb / IWebResp / IX509Chain インターフェースを利用して実装されています。 |
HTTP のバージョン | |
---|---|
サポートされる HTTP のバージョンは以下の通りです。
|
HTTP 接続の状態遷移
HTTP 接続(SFXHTTPConnection インスタンス)は、 以下の 3 種類の状態を遷移します(正確には 4 種類の状態を遷移します)。
表 215. HTTP 接続の状態
HTTP 接続の状態 | 解説 |
---|---|
STATE_CLOSE |
HTTP 接続を初期化していない状態です。 SFXHTTPConnection インスタンス生成直後 (SFXHTTPConnection::SFXHTTPConnection コンストラクタ実行直後)、または SFXHTTPConnection::Close 関数を呼び出すと、 STATE_CLOSE の状態になります。 |
STATE_OPEN(STATE_OPEN_UNESTABLISHED/STATE_OPEN_ESTABLISHED) |
Web サーバーへ接続する前の状態と、接続した後の状態を表します。 両方とも、HTTP 接続は初期化済みの状態です。 便宜上、このリファレンスでは、 それぞれ STATE_OPEN_UNESTABLISHED、STATE_OPEN_ESTABLISHED と呼びます(STATE_OPEN は、これら 2 つをまとめた状態を表します )。 STATE_CLOSE の状態で、 SFXHTTPConnection::Open 関数を呼び出すと、STATE_OPEN_UNESTABLISHED の状態になります。 また、STATE_OPEN_ESTABLISHED の状態で SFXHTTPConnection::Clear 関数を呼び出すと、STATE_OPEN_UNESTABLISHED の状態になります。 |
STATE_CONNECT |
Web サーバーへ接続中である状態を表します。 STATE_OPEN の状態で、 SFXHTTPConnection::Connect 関数を呼び出すと、STATE_CONNECT の状態になりますが、 この関数で指定するコールバック関数(※)に接続の結果が通知されると、 STATE_OPENの状態に戻ります(接続に成功した場合は STATE_OPEN_ESTABLISHED、失敗した場合は STATE_OPEN_UNESTABLISHED)。 |
コールバック関数 | |
---|---|
Web サーバーに接続するには、 SFXHTTPConnection::Connect 関数を呼び出します。 接続の結果であるエラーコードは、この関数で指定したコールバック関数の第 1 引数に通知されます。 エラーコードが SFERR_NO_ERROR の場合は、HTTP レスポンスの取得に成功しています。 このとき、HTTP 接続の状態は STATE_OPEN_ESTABLISHED となります。 SFERR_FAILED の場合は、HTTP レスポンスの取得に失敗しています。 このとき、HTTP 接続の状態は STATE_OPEN_UNESTABLISHED となります。 |
HTTP クライアントの実装
HTTP クライアントは、 SFXHTTPConnection クラスを使用して以下の手順で実装します。
例 829. HTTP クライアントの実装
// コールバック関数で使用するので _http はクラスのメンバ変数として定義する class MyClass { private: SFXHTTPConnection _http; SFXAnsiStringStreamReader _reader; SFXAnsiString _receivedString; public: Void Start(Void); XALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect) XALLBACK_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/", XALLBACK_INTERNAL(OnConnect))) == SFERR_NO_ERROR) { #else // HTTPS 通信の場合 // 必要に応じて SSL 認証モードを設定する _http.SetTrustMode(SSL_TRUST_MODE_FAIL); // Web サーバーへ接続する // ※ 接続要求の結果は、OnConnect 関数に通知される if ((error = _http.Connect("https://www.example.com/", XALLBACK_INTERNAL(OnConnect))) == SFERR_NO_ERROR) { #endif ... } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき // 接続を閉じる _http.Close(); } return; } // 接続要求の結果が通知されるコールバック関数 XALLBACK_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) { // ストリームを使用して HTTP レスポンスボディを読み込む // HTTP レスポンスボディ読み込み用ストリームを取得する if ((error = _http.GetStreamReader(1024, &_reader)) == SFERR_NO_ERROR) { // フェッチを行う: HTTP レスポンスボディからストリームバッファにデータを読み込む // ※ 読み込み(フェッチ)の結果は、OnFetch 関数に通知される if ((error = _reader.Fetch(XALLBACK_INTERNAL(OnFetch))) == SFERR_NO_ERROR) { TRACE(">> fetching..."); } } } else { error = SFERR_INVALID_STATE; } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき // ストリームを解放する _reader.Release(); // 接続を閉じる _http.Close(); } return; } // 読み込み(フェッチ)の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error) { SFXAnsiString string; if (error == SFERR_NO_ERROR) { // ストリームバッファから string 変数にデータを読み込む if ((error = _reader.ReadSFXAnsiString(&string)) == SFERR_NO_ERROR) { // _string 変数に string 変数を追加する if ((error = _string.Add(string)) == SFERR_NO_ERROR) { // 残りのデータをチェックする if (_reader.Ends()) { // すべてのデータを読み込んだとき: // HTTP レスポンスボディをデバッグウィンドウに表示する TRACE("--------"); TRACE("%s", _string.GetCString()); TRACE("--------"); // ストリームを解放する _reader.Release(); // 接続を閉じる _http.Close(); } else { // 読み込むデータがまだ存在するとき: // フェッチを行う: HTTP レスポンスボディからストリームバッファにデータを読み込む // ※ 読み込み(フェッチ)の結果は、OnFetch 関数に通知される error = _reader.Fetch(XALLBACK_INTERNAL(OnFetch)); } } } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき // ストリームを解放する _reader.Release(); // 接続を閉じる _http.Close(); } return; }
BREW 2.0 では、 1536 バイト以上のデータを送信できません。
BREW 2.1 では、 65536 バイト以上のデータを送信できません。
コンストラクタ/デストラクタ |
---|
SFXHTTPConnection( Void ) SFXHTTPConnection クラスのコンストラクタです。
|
~SFXHTTPConnection( Void ) SFXHTTPConnection クラスのデストラクタです。
|
パブリック関数 | |
---|---|
Void |
Cancel( Void ) Web サーバーへの接続をキャンセルします。
|
SFCError |
Clear( Void ) 内部変数を初期化します。
|
Void |
Close( Void ) HTTP 接続を閉じます。
|
SFCError |
Connect(
SFXAnsiStringConstRef url
, CallbackSPP spp
, VoidPtr reference
) Web サーバーに接続します。
|
SFXAnsiStringConstRef |
GetBaseUrl( Void ) Basic 認証の基準 URL を取得します。
|
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 リクエストメソッドを取得します。
|
SFXAnsiStringConstRef |
GetPassword( Void ) Basic 認証のパスワードを取得します。
|
SFXSocketAddressConstRef |
GetProxyServer( Void ) プロキシサーバーを取得します。
|
SFBSourceSmpConstRef |
GetRequestContent( Void ) HTTP リクエストボディを管理する SFBSource インスタンスを取得します。
|
UInt32 |
GetRequestFlag( Void ) HTTP リクエストフラグを取得します。
|
SFXAnsiStringConstRef |
GetRequestHeader(
SFXAnsiStringConstRef key
) HTTP リクエストヘッダーを取得します。
|
SFXPropertyConstRef |
GetRequestHeader( Void ) HTTP リクエストヘッダーを取得します。
|
SFBSourceSmpConstRef |
GetResponseContent( Void ) HTTP レスポンスボディを管理する 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 インスタンスを取得します。
|
StateEnum |
GetState( Void ) HTTP/HTTPS 接続の状態を取得します。
|
SFCError |
GetStreamReader(
UInt32 size
, SFXStreamReaderPtr result
) HTTP レスポンスボディを読み込むためのデータ受信用ストリームを取得します。
|
SFCError |
GetStreamReader(
SFXStreamReaderPtr result
) HTTP レスポンスボディを読み込むためのデータ受信用ストリームを取得します。
|
SFCError |
GetStreamWriter(
UInt32 size
, SFXStreamWriterPtr result
) HTTP リクエストボディにデータを書き込むためのデータ送信用ストリームを取得します。
|
SFCError |
GetStreamWriter(
SFXStreamWriterPtr result
) HTTP リクエストボディにデータを書き込むためのデータ送信用ストリームを取得します。
|
UInt32 |
GetTimeoutMillisecond( Void ) 接続タイムアウト時間を取得します。 [単位: ミリ秒]
|
UInt32 |
GetTrustMode( Void ) HTTPS 通信の SSL 認証モードを取得します。
|
SFXAnsiStringConstRef |
GetType( Void ) HTTP レスポンスヘッダーの Content-Type フィールドを取得します。
|
SFXAnsiStringConstRef |
GetUser( Void ) Basic 認証のユーザー名を取得します。
|
SFXAnsiStringConstRef |
GetUserAgent( Void ) ユーザーエージェントを取得します。
|
SFCError |
Open(
AEECLSID id = AEECLSID_WEB
) HTTP 接続を開きます。
|
SFCError |
SetAuthorizeData(
SFXAnsiStringConstRef user
, SFXAnsiStringConstRef passwd
, SFXAnsiStringConstRef url
) HTTP ベーシック認証の情報を設定します。
|
SFCError |
SetMethod(
SFXAnsiStringConstRef param
) HTTP リクエストメソッドを設定します。
|
SFCError |
SetProxyServer(
SFXSocketAddressConstRef param
) プロキシサーバーを設定します。
|
SFCError |
SetRequestContent(
SFXFileConstRef file
) HTTP リクエストボディにストレージまたはソースを設定します。
|
SFCError |
SetRequestContent(
SFXMemoryConstRef memory
) HTTP リクエストボディにストレージまたはソースを設定します。
|
SFCError |
SetRequestContent(
SFXStorageConstRef storage
, SInt32 length
) HTTP リクエストボディにストレージまたはソースを設定します。
|
SFCError |
SetRequestContent(
SFBSourceSmpConstRef source
, SInt32 length
) HTTP リクエストボディにストレージまたはソースを設定します。
|
SFCError |
SetRequestFlag(
UInt32 param
) HTTP リクエストフラグを設定します。
|
SFCError |
SetRequestHeader(
SFXAnsiStringConstRef key
, SFXAnsiStringConstRef value
) HTTP リクエストヘッダーを設定します。
|
Void |
SetTimeoutCallback(
SFXCallback::CallbackSPP spp
, VoidPtr reference
) 接続タイムアウトコールバックを設定します。
|
Void |
SetTimeoutMillisecond(
UInt32 msec
) 接続タイムアウト時間を設定します 。[単位: ミリ秒]
|
SFCError |
SetTrustMode(
UInt32 param
) HTTPS 通信の SSL 認証モードを設定します。
|
SFCError |
SetUserAgent(
SFXAnsiStringConstRef param
) ユーザーエージェントを設定します。
|
SFCError |
LoadCertificate(
SInt32 kind
, SFXPathConstRef path
)
(LoadCertificate から継承)
ASN.1/DER 形式の証明書のファイルまたはバッファを読み込みます。
|
SFCError |
LoadCertificate(
SInt32 kind
, SFXBufferConstRef buffer
)
(LoadCertificate から継承)
ASN.1/DER 形式の証明書のファイルまたはバッファを読み込みます。
|
型 |
---|
CallbackSPP HTTP 接続の結果が通知されるコールバック関数の型です。
|
StateEnum HTTP/HTTPS 接続の状態を表す列挙体
|
[ public, explicit ] SFXHTTPConnection(Void);
このコンストラクタは、以下の初期化を行います。
注意 | |
---|---|
このコンストラクタを実行した直後、 HTTP 接続の状態は STATE_CLOSE です。 Web サーバーに接続するには、 SFXHTTPConnection::Open 関数を呼び出してこの HTTP 接続を開く必要があります。 |
SFXHTTPConnection::Open | SFXHTTPConnection::SetTimeoutMillisecond | SFXHTTPConnection::SetTimeoutCallback
[ public ] ~SFXHTTPConnection(Void);
このデストラクタは、内部で SFXHTTPConnection::Close 関数を呼び出します。
具体的には、HTTP リクエストと HTTP レスポンスの内容を初期化し、 この HTTP 接続が内部で保持する SFBWeb / SFBWebResp インスタンスを解放し、 この HTTP 接続を閉じた状態にし、 SFXHTTPConnection::Connect 関数で登録したコールバックをキャンセルします。
[ public ] Void Cancel(Void);
この関数は、 SFXHTTPConnection::Connect 関数による Web サーバーへの接続をキャンセルします。
SFXHTTPConnection::Connect 関数で登録したコールバックや接続タイムアウトのタイマーをキャンセルし、 この HTTP 接続の内容を SFXHTTPConnection::Connect 関数を呼び出す前の状態に戻します。
この関数は、HTTP 接続が STATE_CONNECT の状態のとき (SFXHTTPConnection::Connect 関数を呼び出してからその結果がコールバックに通知されるまで)に有効です。
この関数は、SFXHTTPConnection::Close 関数の内部からも呼び出されます。
SFXHTTPConnection::Close | SFXHTTPConnection::Connect | SFXHTTPConnection::SetTimeoutMillisecond | SFXHTTPConnection::SetTimeoutCallback
[ public ] SFCError Clear(Void);
この関数は、この HTTP 接続の内部変数を初期化します。
HTTP 接続の状態は、STATE_OPEN_UNESTABLISHED になります。
具体的には、以下の処理を行います。
注意 | |
---|---|
この関数を実行した段階では、Web サーバーへの接続は確立されていません。 Web サーバーへの接続を確立するには、 この HTTP 接続の HTTP リクエストを作成し、 SFXHTTPConnection::Connect 関数を呼び出す必要があります。 |
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
[ public ] Void Close(Void);
この関数は、この HTTP 接続を閉じます。
HTTP 接続の状態は、STATE_CLOSE になります。
具体的には、以下の処理を行います。
Tip | |
---|---|
サスペンド時は、この関数を呼び出してリソースを解放する必要があります。 |
注意 | |
---|---|
この関数は、SFXHTTPConnection::~SFXHTTPConnection デストラクタから呼び出されます。 この関数は、内部で SFXHTTPConnection::Cancel 関数を呼び出します。 |
SFXHTTPConnection::~SFXHTTPConnection | SFXHTTPConnection::Open | SFXHTTPConnection::Cancel | SFXHTTPConnection::GetSFBWeb | SFXHTTPConnection::GetSFBWebResp | SFXHTTPConnection::Open
[ public ] SFCError Connect( SFXAnsiStringConstRef url // 接続する Web サーバーの URL CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ(参照値) );
接続する Web サーバーの URL を指定します。
Web サーバーへの接続が完了した後に呼び出されるコールバック関数を指定します。
Web サーバーへの接続が完了した後に呼び出されるコールバック関数が参照するデータを指定します。
この関数は、引数に指定した Web サーバーに接続します。
この関数を呼び出した直後 HTTP 接続の状態は、STATE_CONNECT になりますが、 接続の結果がコールバックに通知されたときには再び STATE_OPEN に戻ります (成功した場合は STATE_OPEN_ESTABLISHED、失敗した場合は STATE_OPEN_UNESTABLISHED)。
具体的には、以下の処理を行います。
接続が確立する前にキャンセルするには、 SFXHTTPConnection::Cancel 関数を呼び出します。
なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。
SFERR_FAILED エラーの取得 | |
---|---|
接続に失敗したことを表す SFERR_FAILED エラーは、 引数に指定したコールバック関数の第 1 引数に渡されます。 この関数の戻り値として取得することはでません。 |
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
// HTTP 通信に必要な SFXHTTPConnection インスタンス _http はクラスのメンバ変数として定義する class MyClass { private: SFXHTTPConnection _http; public: Void Start(Void); // HTTP 接続を開始する XALLBACK_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" に設定する // Web サーバーへ接続する // ※ 接続要求の結果は、OnConnect 関数に通知される if ((error = _http.Connect("http://www.example.com/", XALLBACK_INTERNAL(OnConnect))) == SFERR_NO_ERROR) { ... }else{ // エラーが起きたので、接続を閉じる _http.Close(); } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... } return; } // 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { ... } }
SFXHTTPConnection::Open | SFXHTTPConnection::Cancel | SFXHTTPConnection::SetTimeoutMillisecond | SFXHTTPConnection::SetTimeoutCallback
[ public, const ] SFXAnsiStringConstRef GetBaseUrl(Void);
Basic 認証の基準 URL
[ public, const ] SFXDate GetDate(Void);
HTTP レスポンスヘッダーの Date フィールドの値(SFXDate)
この関数は、この HTTP 接続の HTTP レスポンスヘッダーの Date フィールドの値(SFXDate)を取得します。
HTTP レスポンスヘッダーに Date フィールドが存在しない場合、 またはHTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 SFXDate(0) を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_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()); ... } }
[ public, const ] SFXAnsiStringConstRef GetEncoding(Void);
HTTP レスポンスヘッダーの Content-Encoding フィールドの値
この関数は、この HTTP 接続の HTTP レスポンスヘッダーの Content-Encoding フィールドの値を取得します。
HTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 空文字列(SFXAnsiString::EmptyInstance())を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { // HTTP レスポンスヘッダーの Content-Encoding フィールドを取得する TRACE("content encoding = %s", _http.GetEncoding().GetCString()); ... } }
[ public, const ] SFXDate GetExpires(Void);
HTTP レスポンスヘッダーの Expires フィールドの値(SFXDate)
この関数は、この HTTP 接続の HTTP レスポンスヘッダーの Expires フィールドの値(SFXDate)を取得します。
HTTP レスポンスヘッダーに Expires フィールドが存在しない場合、 またはHTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 SFXDate(0) を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_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()); ... } }
[ public, const ] SFXDate GetLastModified(Void);
HTTP レスポンスヘッダーの Last-Modified フィールドの値(SFXDate)
この関数は、この HTTP 接続の HTTP レスポンスヘッダーの Last-Modified フィールドの値(SFXDate)を取得します。
HTTP レスポンスヘッダーに Last-Modified フィールドが存在しない場合、 またはHTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 SFXDate(0) を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_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()); ... } }
[ public, const ] SInt32 GetLength(Void);
HTTP レスポンスヘッダーの Content-Length フィールドの値
この関数は、この HTTP 接続の HTTP レスポンスヘッダーの Content-Length フィールドの値を取得します。
HTTP レスポンスヘッダーに Content-Length フィールドが存在しない場合、 またはHTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 -1 を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { // HTTP レスポンスヘッダーの Content-Length フィールドを取得する TRACE("content length = %d", _http.GetLength()); ... } }
[ public, const ] SFXAnsiStringConstRef GetMethod(Void);
HTTP リクエストメソッド
この関数は、SFXHTTPConnection::SetMethod 関数で設定した、 この HTTP 接続の HTTP リクエストメソッドを取得します。
HTTP 接続の状態が STATE_OPEN でない場合、 空文字列(SFXAnsiString::EmptyInstance()) を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { // HTTP リクエストメソッドを取得する TRACE("method = %s", _http.GetMethod().GetCString()); ... } }
[ public, const ] SFXSocketAddressConstRef GetProxyServer(Void);
この HTTP 接続のプロキシサーバー(SFXSocketAddress)
この関数は、SFXHTTPConnection::SetProxyServer 関数で設定した、 この HTTP 接続のプロキシサーバー(SFXSocketAddress)を取得します。
HTTP 接続の状態が STATE_OPEN でない場合、 またはプロキシサーバーが設定されていない場合、 SFXSocketAddress::EmptyInstance() を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { // プロキシサーバーを取得する TRACE("method = %s", _http.GetProxyServer().Get().GetCString()); ... } }
[ public, const ] SFBSourceSmpConstRef GetRequestContent(Void);
HTTP リクエストボディを管理する SFBSource インスタンス
この関数は、SFXHTTPConnection::SetRequestContent 関数を使用して設定した、 この HTTP 接続の HTTP リクエストボディを管理する SFBSource インスタンスを取得します。
HTTP 接続の状態が STATE_OPEN でない場合、 または何も設定されていない場合、 &SFBSourceSmp::EmptyInstance() を返します。
[ public, const ] UInt32 GetRequestFlag(Void);
HTTP リクエストフラグ
この関数は、SFXHTTPConnection::SetRequestFlag 関数で設定した、 HTTP リクエストフラグを取得します。
HTTP 接続の状態が STATE_OPEN でない場合、 0 を返します。
[ public, const ] SFXAnsiStringConstRef GetRequestHeader( SFXAnsiStringConstRef key // フィールド名 );
[ public, const ] SFXPropertyConstRef GetRequestHeader(Void);
HTTP リクエストヘッダー
この関数は、HTTP リクエストヘッダーを取得します。 フィールド名を指定して個別に取得することも可能です。 引数に何も指定しない場合は、全ての HTTP リクエストヘッダーを取得します。
HTTP 接続の状態が STATE_OPEN でない場合、、 空文字列(SFXAnsiString::EmptyInstance())、または 空のプロパティ(SFXProperty::EmptyInstance()) を返します。
[ public, const ] SFBSourceSmpConstRef GetResponseContent(Void);
HTTP レスポンスボディを管理する SFBSource インスタンス
この関数は、この HTTP 接続の HTTP レスポンスボディを管理する SFBSource インスタンスを取得します。
HTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 SFBSourceSmp::EmptyInstance() を返します。
Tip | |
---|---|
HTTP 接続確立後、この関数を使用して HTTP レスポンスボディを取得することが可能です。 |
注意 | |
---|---|
SFXHTTPConnection::GetStreamReader 関数は、 SFXHTTPConnection::GetResponseContent 関数の戻り値である SFBSource インスタンスからストリームを取得しています。 |
HTTP レスポンスボディの読み込み | |
---|---|
SFXHTTPConnection::GetResponseContent 関数を使用して HTTP レスポンスボディを読み込む場合は、 SFXHTTPConnection::GetStreamReader 関数を使えません。 逆に、SFXHTTPConnection::GetStreamReader 関数を使用して HTTP レスポンスボディを読み込む場合は、 SFXHTTPConnection::GetResponseContent 関数を使えません。 |
[ public, const ] UInt32 GetResponseFlag(Void);
HTTP レスポンスフラグ
この関数は、この HTTP 接続の HTTP レスポンスフラグを取得します。
HTTP レスポンスフラグは、以下のフラグの論理和として表現されます。
HTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 0 を返します。
SFXHTTPConnection::SetRequestFlag | SFXHTTPConnection::Connect | SFBWebResp | BREW API IWEBRESP_GetOpt
[ public, const ] SFXAnsiStringConstRef GetResponseHeader( SFXAnsiStringConstRef key // フィールド名 );
[ public, const ] SFXPropertyConstRef GetResponseHeader(Void);
HTTP レスポンスヘッダー
この関数は、HTTP レスポンスヘッダーを取得します。 フィールド名を指定して個別に取得することも可能です。 引数に何も指定しない場合は、全ての HTTP レスポンスヘッダーを取得します。
HTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 空文字列(SFXAnsiString::EmptyInstance())、 空のプロパティ(SFXProperty::EmptyInstance())を返します。
// 接続が完了すると呼び出されるコールバック関数 XALLBACK_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()); } } }
[ public, const ] SInt32 GetResultCode(Void);
HTTP ステータスコード
この関数は、HTTP ステータスコードを取得します。
HTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 -1 を返します。
HTTP 接続が確立されている場合、 この関数の戻り値は、BREW API の WebRespInfo 内のフィールド nCode と同じです。
nCode は、プロトコルエラーコードまたは「負の」 WEB_ERROR エラーコードを表します。 正の値はサーバーから返された値であり、負のエラーコードはシステムエラーを表します。 戻り値を WEB_ERROR_MAP() に渡すことによって、BREW の WEB_ERROR エラーコードを取得できます。 また、WEB_ERROR_SUCCEEDED() に渡すことによって操作が成功したかどうか判定できます。
注意 | |
---|---|
WEB_ERROR エラーコードの詳細については、 AEEError.h を参照してください。 |
// 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { ... if (_http.GetResultCode() == 200) { // HTTP ステータスコードが 200 ( 成功 ) の場合 ... } } }
SFXHTTPConnection::Connect | BREW API WebRespInfo | BREW API WEB_ERROR_MAP | BREW API WEB_ERROR_SUCCEEDED
[ public, const ] SFBWebSmpConstRef GetSFBWeb(Void);
この HTTP 接続が内部で管理する SFBWeb インスタンス
この関数は、この HTTP 接続が内部で管理する SFBWeb インスタンスを取得します。
[ public, const ] SFBWebRespSmpConstRef GetSFBWebResp(Void);
この HTTP 接続が内部で管理する SFBWebResp インスタンス
この関数は、この HTTP 接続が内部で管理する SFBWebResp インスタンスを取得します。
[ public, const ] StateEnum GetState(Void);
HTTP/HTTPS 接続の状態 (SFXHTTPConnection::StateEnum)
HTTP/HTTPS 接続の状態 (SFXHTTPConnection::StateEnum) を取得します。
[ public ] SFCError GetStreamReader( UInt32 size // バッファサイズ SFXStreamReaderPtr result // データ受信用ストリームへのポインタ );
[ public ] SFCError GetStreamReader( SFXStreamReaderPtr result // データ受信用ストリームへのポインタ );
この関数は、この HTTP 接続の HTTP レスポンスボディを読み込むためのデータ受信用ストリームを取得します。
size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamReader クラスが利用されます。
Tip | |
---|---|
データ受信用ストリームは、受信するデータの種類に応じて SFXBinaryStreamReader、 SFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。 |
注意 | |
---|---|
SFXHTTPConnection::GetStreamReader 関数を使用して取得するストリームは、 SFXHTTPConnection::GetResponseContent 関数の戻り値である SFBSource インスタンスから取得しています。 |
HTTP レスポンスボディの読み込み | |
---|---|
SFXHTTPConnection::GetResponseContent 関数を使用して HTTP レスポンスボディを読み込む場合は、 SFXHTTPConnection::GetStreamReader 関数を使えません。 逆に、SFXHTTPConnection::GetStreamReader 関数を使用して HTTP レスポンスボディを読み込む場合は、 SFXHTTPConnection::GetResponseContent 関数を使えません。 |
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN_ESTABLISHED のときにのみ有効です。 |
// HTTP 通信に必要な SFXHTTPConnection インスタンス _http はクラスのメンバ変数として定義する class MyClass { private: SFXHTTPConnection _http; SFXAnsiStringStreamReader _reader; public: Void Start(Void); XALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect) XALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch) }; // 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { ... // HTTP ステータスコードが 200 ( 成功 ) の場合 if (_http.GetResultCode() == 200) { // HTTP レスポンスボディを読み込むためのデータ受信用ストリームを取得する if ((error = _http.GetStreamReader(1024, &_reader)) == SFERR_NO_ERROR) { // HTTP レスポンスボディからデータ受信用ストリームへデータを読み込む if ((error = _reader.Fetch(XALLBACK_INTERNAL(OnFetch))) == SFERR_NO_ERROR) { ... } } } else { error = SFERR_INVALID_STATE; } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _http.Close(); } return; } // 新しいデータを受信すると呼び出されるコールバック関数 XALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error) { if (error == SFERR_NO_ERROR) { ... } }
SFXHTTPConnection::GetResponseContent | SFXHTTPConnection::GetStreamWriter | SFXHTTPConnection::Connect | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | ストリームバッファ
[ public ] SFCError GetStreamWriter( UInt32 size // バッファサイズ SFXStreamWriterPtr result // データ送信用ストリームへのポインタ );
[ public ] SFCError GetStreamWriter( SFXStreamWriterPtr result // データ送信用ストリームへのポインタ );
この関数は、この HTTP 接続の HTTP リクエストボディにデータを書き込むためのデータ送信用ストリームを取得します。
size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamWriter クラスが利用されます。
Tip | |
---|---|
データ送信用ストリームは、送信するデータの種類に応じて SFXBinaryStreamWriter、 SFXAnsiStringStreamWriter、または SFXWideStringStreamWriter クラスを使い分けます。 |
Tip | |
---|---|
SFXHTTPConnection::GetStreamWriter 関数を使用してデータを送信する場合、 一旦ヒープ上に HTTP リクエストボディが作成されるため、 送信可能なデータサイズは携帯電話に搭載されているメモリ容量に依存することになります。 SFXHTTPConnection::SetRequestContent 関数を使用してファイルストレージ(SFXFile)を設定すると、 ファイルから直接ネットーワークへデータが送信可能となり、大きなサイズのデータを送信できます。 |
HTTP リクエストボディの作成 | |
---|---|
SFXHTTPConnection::SetRequestContent 関数を使用して HTTP リクエストボディを作成する場合は、 SFXHTTPConnection::GetStreamWriter 関数を使えません。 逆に、SFXHTTPConnection::GetStreamWriter 関数を使用して HTTP リクエストボディを作成する場合は、 SFXHTTPConnection::SetRequestContent 関数を使えません。 |
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
// HTTP 通信に必要な SFXHTTPConnection インスタンス _http はクラスのメンバ変数として定義する class MyClass { private: SFXHTTPConnection _http; public: Void Start(Void); XALLBACK_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"; // HTTP リクエストボディにデータを書き込むためのデータ送信用ストリームを取得する if ((error = _http.GetStreamWriter(send.GetLength(), &writer)) == SFERR_NO_ERROR) { // データ送信用ストリームにデータを書き込む if ((error = writer.WriteSFXAnsiString(send)) == SFERR_NO_ERROR) { // データ送信用ストリームをフラッシュを行う(実際に、HTTP リクエストボディにデータを書き込む) 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", XALLBACK_INTERNAL(OnConnect))) == SFERR_NO_ERROR) { // 接続を開始する ... } } } } } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _http.Close(); } return; } // 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { .... } return; }
SFXHTTPConnection::GetStreamReader | SFXHTTPConnection::SetRequestContent | SFXHTTPConnection::Open | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter | ストリームバッファ
[ public, const ] UInt32 GetTimeoutMillisecond(Void);
接続タイムアウト時間 [単位: ミリ秒]
この関数は、 接続タイムアウト時間を取得します。 [単位: ミリ秒]
[ public, const ] UInt32 GetTrustMode(Void);
SSL 認証モード
この関数は、HTTPS 通信の SSL 認証モードを取得します。
HTTP 接続の状態が STATE_OPEN でない場合、 0 を返します。
以下の 4 種類の SSL 認証モードの何れかが返却されます。
[ public, const ] SFXAnsiStringConstRef GetType(Void);
HTTP レスポンスヘッダーの Content-Type フィールド
この関数は、この HTTP 接続の HTTP レスポンスヘッダーの Content-Type フィールドを取得します。
HTTP 接続の状態が STATE_OPEN_ESTABLISHED でない場合、 空文字列(SFXAnsiString::EmptyInstance()) を返します。
// 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { // HTTP レスポンスヘッダーの Content-Type フィールドを取得する TRACE("content type = %s", _http.GetType().GetCString()); ... } }
[ public, const ] SFXAnsiStringConstRef GetUser(Void);
ユーザー名
[ public, const ] SFXAnsiStringConstRef GetUserAgent(Void);
ユーザーエージェント
この関数は、この HTTP 接続のユーザーエージェントを取得します。
HTTP 接続の状態が STATE_OPEN でない場合、 空文字列(SFXAnsiString::EmptyInstance()) を返します。
[ public ] SFCError LoadCertificate( SInt32 kind // 証明書の種類 SFXPathConstRef path // 証明書のファイルパス );
[ public ] SFCError LoadCertificate( SInt32 kind // 証明書の種類 SFXBufferConstRef buffer // 証明書のバッファ );
証明書の種類: WEBOPT_X509_ROOT_CERT, WEBOPT_X509_LEAF_CERT, WEBOPT_X509_BRANCH_CERT のいずれか
ASN.1/DER 形式の証明書のファイルパス
ASN.1/DER 形式の証明書のバッファ
ASN.1/DER 形式の証明書のファイルまたはバッファを読み込みます。
HTTP/HTTPS 接続を開く前に実行する必要があります。
ルート証明書を読み込む
SFXHTTPConnection http;
SFCError error;
// 接続を開く前にルート証明書を読み込む
if ((error = http.LoadCertificate(WEBOPT_X509_ROOT_CERT, SFXPath("scradle.der"))) == SFERR_NO_ERROR) {
if ((error = http.Open()) == SFERR_NO_ERROR) {
error = http.Connect("https://www.s-cradle.com/example/tabbrowser/", XALLBACK_INTERNAL(OnConnect));
}
}
この関数は、この HTTP 接続を開きます。
HTTP 接続の状態は、STATE_OPEN_UNESTABLISHED になります。
具体的には、以下の処理を行います。
注意 | |
---|---|
この関数を実行した段階では、Web サーバーへの接続は確立されていません。 Web サーバーへの接続を確立するには、 この HTTP 接続の HTTP リクエストを作成し、 SFXHTTPConnection::Connect 関数を呼び出す必要があります。 |
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_CLOSE のときにのみ有効です。 |
// HTTP 通信に必要な 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; }
[ public ] SFCError SetAuthorizeData( SFXAnsiStringConstRef user // ユーザー名 SFXAnsiStringConstRef passwd // パスワード SFXAnsiStringConstRef url // HTTP ベーシック認証の開始 URL );
ユーザー名を指定します。
パスワードを指定します。
URL を指定します。 この URL から始まるページが、認証の対象となります。
この関数は、HTTP ベーシック認証の情報を設定します。
この関数を実行した後、 url 引数に指定した URL で始まるページへのアクセスは、 指定された認証情報を持つヘッダーをつけて行われます。
HTTP/HTTPS 接続の状態が STATE_OPEN のときのみ呼び出しが成功します。
認証情報の設定を解除する時は、空文字列を指定してこの関数を呼び出します。
また、 url 引数に指定した URL で始まらないページをアクセスした場合、 認証情報は使用されません。
注意 | |
---|---|
戻り値が SFERR_NO_ERROR 以外の場合は、ベーシック認証は行われません。 |
[ public ] SFCError SetMethod( SFXAnsiStringConstRef param // HTTP リクエストメソッド );
この関数は、この HTTP 接続の HTTP リクエストメソッドを設定します。
引数には、"GET"、"POST"、"HEAD" など BREW の IWeb インターフェースが対応している HTTP リクエストメソッドを指定できます。
デフォルト値: "GET"
設定された値は、 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数が呼び出されるまで有効です。
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
// HTTP 通信に必要な 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" に設定する error = _http.SetMethod("GET"); ... } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... } return; }
SFXHTTPConnection::GetMethod | SFXHTTPConnection::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | SFXAnsiString | BREW API IWeb
[ public ] SFCError SetProxyServer( SFXSocketAddressConstRef param // プロキシサーバー );
この関数は、この HTTP 接続のプロキシサーバー(SFXSocketAddress)を設定します。
設定された値は、 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数が呼び出されるまで有効です。
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
// HTTP 通信に必要な 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::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | SFXSocketAddress
[ public ] SFCError SetRequestContent( SFXFileConstRef file // HTTP リクエストボディに設定するファイルストレージ );
[ public ] SFCError SetRequestContent( SFXMemoryConstRef memory // HTTP リクエストボディに設定するメモリストレージ );
[ public ] SFCError SetRequestContent( SFXStorageConstRef storage // HTTP リクエストボディに設定するストレージ SInt32 length // ストレージの長さ );
[ public ] SFCError SetRequestContent( SFBSourceSmpConstRef source // HTTP リクエストボディに設定するソース SInt32 length // ソースの長さ );
この関数は、 この HTTP 接続の HTTP リクエストボディにストレージまたはソースを設定します。
引数にファイルストレージまたはメモリストレージだけを指定したとき、 そのストレージ全体の長さが自動的に設定されます。
length 引数を指定する場合、 ストレージまたはソースの現在の読み書きポインタの位置から指定した長さ分のデータが HTTP リクエストボディに設定されます。
Tip | |
---|---|
SFXHTTPConnection::SetRequestContent 関数を使用してファイルストレージ(SFXFile)を設定すると、 ファイルから直接ネットーワークへデータが送信可能となり、 大きなサイズのデータを送信できます。 SFXHTTPConnection::GetStreamWriter 関数を使用してデータを送信する場合、 一旦ヒープ上に HTTP リクエストボディが作成されるため、 送信可能なデータサイズは携帯電話に搭載されているメモリ容量に依存することになります。 |
HTTP リクエストボディの作成 | |
---|---|
SFXHTTPConnection::SetRequestContent 関数を使用して HTTP リクエストボディを作成する場合は、 SFXHTTPConnection::GetStreamWriter 関数を使えません。 逆に、SFXHTTPConnection::GetStreamWriter 関数を使用して HTTP リクエストボディを作成する場合は、 SFXHTTPConnection::SetRequestContent 関数を使えません。 |
設定された値は、 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数が呼び出されるまで有効です。
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
注意 | |
---|---|
SFXHTTPConnection::SetRequestContent 関数は、 SophiaFramework UNIVERSE 5.1.11 以降有効です。 |
SFXHTTPConnection::GetRequestContent | SFXHTTPConnection::GetStreamWriter | SFXHTTPConnection::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | SFBSource | SFXStorage
この関数は、この HTTP 接続の HTTP リクエストフラグを設定します。
注意 | |
---|---|
HTTP リクエストフラグは、内部的に IWEB_GetResponse 関数に渡されます。 |
具体的には、以下のフラグの論理和として設定します。
設定された値は、 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数が呼び出されるまで有効です。
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
SFXHTTPConnection::GetRequestFlag | SFXHTTPConnection::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | BREW API IWEB_GetResponse
[ public ] SFCError SetRequestHeader( SFXAnsiStringConstRef key // ヘッダーの名前 SFXAnsiStringConstRef value // ヘッダーの値 );
この関数は、この HTTP 接続の HTTP リクエストヘッダーを設定します。
同一の key で複数回呼ばれた場合は、すべて記憶してリクエスト時に送信されます。
設定された値は、 SFXHTTPConnection::Connect 関数、SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数を呼び出すまで有効です。
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
SFXHTTPConnection::GetRequestHeader | SFXHTTPConnection::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | SFXHTTPConnection::Connect
[ public ] Void SetTimeoutCallback( SFXCallback::CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ(参照値) );
この関数は、 通信開始から接続タイムアウト時間を過ぎても応答がない場合に呼び出されるコールバック関数を設定します。
コールバック関数を設定しなかった場合は、 SFXHTTPConnection::OnTimeoutDefault 関数が登録されていることになります。
SFXHTTPConnection::OnTimeoutDefault 関数は、以下の内部実装コードにあるように、 SFXHTTPConnection::Cancel 関数を呼び出して通信をキャンセルします。
/*private */XALLBACK_IMPLEMENT_SFXTIMER(SFXHTTPConnection, OnTimeoutDefault) { Cancel(); return; }// XALLBACK_IMPLEMENT_SFXTIMER(SFXHTTPConnection, OnTimeoutDefault)
注意 | |
---|---|
接続タイムアウト時間は、 SFXHTTPConnection::SetTimeoutMillisecond 関数を利用して設定します。 |
この関数は、 接続タイムアウト時間を設定します 。[単位: ミリ秒]
デフォルト値: 0(タイムアウト処理を行いません)
通信開始からタイムアウト時間を過ぎても応答がない場合、 SFXHTTPConnection::SetTimeoutCallback 関数で設定する接続タイムアウトコールバックが呼び出されます。
注意 | |
---|---|
接続タイムアウト時間が 0 のとき、タイムアウト処理を行いません。 |
以下の 4 種類の何れかの SSL 認証モードを指定します。
この関数は、HTTPS 通信の SSL 認証モードを設定します(HTTPS 通信の場合に有効です)。
デフォルト値: SSL_TRUST_MODE_FAIL
設定可能な SSL 認証モードは、 以下の 4 種類です(参照: BREW API ISSL_NegotiateV)。
設定された値は、 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数が呼び出されるまで有効です。
実機において、この値を変更した直後の SFXHTTPConnection::Connect 関数の呼び出しでは SSL_RESULT_SERV_VERS エラーが発生することがあります。
エラーを避けるには、一度 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数を呼び出してからSSL 認証モードを設定し、 SFXHTTPConnection::Connect 関数を呼び出します。
注意 | |
---|---|
詳細情報: BREW API ISSL_NegotiateV |
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
// HTTP 通信に必要な SFXHTTPConnection インスタンス _http はクラスのメンバ変数として定義する class MyClass { private: SFXHTTPConnection _http; public: Void Start(Void); XALLBACK_DECLARE_SFXHTTPCONNECTION(OnConnect) }; // HTTP 接続を開始する Void MyClass::Start(Void) { SFCError error(SFERR_NO_ERROR); // HTTP 接続を開く if ((error = _http.Open()) == SFERR_NO_ERROR) { // SSL 認証モードを設定する _http.SetTrustMode(SSL_TRUST_MODE_FAIL); // 接続を開始する if ((error = _http.Connect("https://www.example.com/", XALLBACK_INTERNAL(OnConnect))) == SFERR_NO_ERROR) { ... }else{ // エラーが発生したとき _http.Close(); } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... } return; } // 接続要求の結果が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXHTTPCONNECTION(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { ... } }
SFXHTTPConnection::GetTrustMode | SFXHTTPConnection::Connect | SFXHTTPConnection::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | BREW API ISSL_NegotiateV
[ public ] SFCError SetUserAgent( SFXAnsiStringConstRef param // ユーザーエージェント );
この関数は、この HTTP 接続のユーザーエージェントを設定します。
設定された値は、 SFXHTTPConnection::Close 関数、または SFXHTTPConnection::Clear 関数が呼び出されるまで有効です。
注意 | |
---|---|
この関数は、HTTP 接続の状態が STATE_OPEN のときにのみ有効です。 |
SFXHTTPConnection::GetUserAgent | SFXHTTPConnection::Open | SFXHTTPConnection::Close | SFXHTTPConnection::Clear | SFXAnsiString
typedef Void(* SFXHTTPConnection::CallbackSPP)(SFCError error, VoidPtr reference)
HTTP 接続の結果が通知されるコールバック関数の型です。
第 1 引数にエラーコード、 第 2 引数は SFXHTTPConnection::Connect 関数でコールバック登録したときの参照値(コールバック関数に渡すデータ。 通常、SFXHTTPConnection インスタンス )が渡されます。
enum StateEnum { STATE_CLOSE = 0, // HTTP/HTTPS 接続を初期化していない状態 STATE_OPEN, // Web サーバーへ接続する前後の状態 STATE_CONNECT // Web サーバーへ接続中である状態 }; SFMTYPEDEFTYPE(StateEnum)
HTTP 接続(SFXHTTPConnection インスタンス)は、 以下の 3 種類の状態を遷移します(正確には 4 種類の状態を遷移します)。
表 216. HTTP 接続の状態
HTTP 接続の状態 | 解説 |
---|---|
STATE_CLOSE |
HTTP 接続を初期化していない状態です。 SFXHTTPConnection インスタンス生成直後 (SFXHTTPConnection::SFXHTTPConnection コンストラクタ実行直後)、または SFXHTTPConnection::Close 関数を呼び出すと、 STATE_CLOSE の状態になります。 |
STATE_OPEN(STATE_OPEN_UNESTABLISHED/STATE_OPEN_ESTABLISHED) |
Web サーバーへ接続する前の状態と、接続した後の状態を表します。 両方とも、HTTP 接続は初期化済みの状態です。 便宜上、このリファレンスでは、 それぞれ STATE_OPEN_UNESTABLISHED、STATE_OPEN_ESTABLISHED と呼びます(STATE_OPEN は、これら 2 つをまとめた状態を表します )。 STATE_CLOSE の状態で、 SFXHTTPConnection::Open 関数を呼び出すと、STATE_OPEN_UNESTABLISHED の状態になります。 また、STATE_OPEN_ESTABLISHED の状態で SFXHTTPConnection::Clear 関数を呼び出すと、STATE_OPEN_UNESTABLISHED の状態になります。 |
STATE_CONNECT |
Web サーバーへ接続中である状態を表します。 STATE_OPEN の状態で、 SFXHTTPConnection::Connect 関数を呼び出すと、STATE_CONNECT の状態になりますが、 この関数で指定するコールバック関数(※)に接続の結果が通知されると、 STATE_OPENの状態に戻ります(接続に成功した場合は STATE_OPEN_ESTABLISHED、失敗した場合は STATE_OPEN_UNESTABLISHED)。 |
[ public, const ] SFXAnsiStringConstRef GetPassword(Void);
Basic 認証のパスワード
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |