nlib
nn::nlib::HttpStyleUri クラスfinal

http/httpsスキームを用いたURIをパースしたりURI文字列を構築したりするためのクラスです。 [詳解]

#include "nn/nlib/HttpStyleUri.h"

公開型

typedef std::pair< const char *, const char * > KeyValue
 クエリのキーと値を格納する型です。
 

公開メンバ関数

 HttpStyleUri () noexcept
 デフォルトコンストラクタです。オブジェクトを初期化します。
 
bool FromUri (const Uri &uri) noexcept
 Uri オブジェクトから変換します。 [詳解]
 
bool ToUri (Uri *uri) const noexcept
 Uri オブジェクトに変換します。 [詳解]
 
bool Parse (const char *str) noexcept
 URIをパースします。 [詳解]
 
bool ComposeString (char *buf, size_t size) const noexcept
 URI文字列を書き出します。 [詳解]
 
template<size_t N>
bool ComposeString (char(&buf)[N]) const noexcept
 ComposeString(buf, N) を呼び出します。
 
bool SetScheme (const char *scheme) noexcept
 スキームを設定します。 [詳解]
 
bool SetUserInfo (const char *userinfo) noexcept
 ユーザー情報を設定します。 [詳解]
 
bool SetHost (const char *host) noexcept
 ホスト名を設定します。%エンコードを施しておく必要はありません。 [詳解]
 
bool SetPort (int port) noexcept
 ポート番号を設定します。 [詳解]
 
bool SetPath (const char *path) noexcept
 パスを設定します。 [詳解]
 
bool SetQuery (const char *query) noexcept
 クエリ文字列からクエリを設定します。 [詳解]
 
bool SetFragment (const char *fragment) noexcept
 フラグメント文字列を設定します。 [詳解]
 
bool AddQuery (const char *key, const char *value) noexcept
 クエリにキーと値を追加します。 [詳解]
 
const char * GetScheme () const noexcept
 スキーム名を取得します。"http"か"https"のどちらかです。 [詳解]
 
const char * GetUserInfo () const noexcept
 ユーザー情報を取得します。 [詳解]
 
const char * GetHost () const noexcept
 ホスト名を取得します。 [詳解]
 
int GetPort () const noexcept
 ポート番号を取得します。 [詳解]
 
size_t GetNumSegment () const noexcept
 格納されているセグメントの数を取得します。 [詳解]
 
const char * GetSegment (size_t i) const noexcept
 インデックスを指定してセグメントを取得します。 [詳解]
 
bool IsPathDirectory () const noexcept
 パスがディレクトリ形式かどうかを取得します。 [詳解]
 
const char * GetQueryValue (const char *key) const noexcept
 キーを指定して値を取得します。見つからなかった場合はNULLを返します。 [詳解]
 
size_t GetNumQuery () const noexcept
 キーに対応する値を取得します。見つからなかった場合はNULLを返します。 [詳解]
 
const KeyValueGetQueryKeyValue (size_t i) const noexcept
 インデックスを指定してキーと値のペアを取得します。見つからなかった場合はNULLを返します。 [詳解]
 
const char * GetFragment () const noexcept
 フラグメント文字列を取得します。 [詳解]
 
bool AddBaseUri (const Uri &relative, const HttpStyleUri &base) noexcept
 相対パスを基底URIを用いて解決します。 [詳解]
 
void Reset () noexcept
 オブジェクトを初期化(リセット)します。
 

詳解

http/httpsスキームを用いたURIをパースしたりURI文字列を構築したりするためのクラスです。

説明
URI文字列がチェックされ、分割・正規化されて格納されます。 パスは../や./等が正規化されセグメントに分割されて格納されます。 例えば、/test/../../../a/b/cのようなパスは/a/b/cのように正規化されてから各セグメントに分割されて格納されます(/../は/とみなされる)。 各セグメント内の%エンコードされた文字はデコードされています。
クエリ文字列はkey=valueを'&'で繋げた文字列になっているものをサポートします。 クエリ文字列は&で分割され、その中の最初の'='でkeyとvalueに分割され順番に格納されます。 keyが重複した場合もそのまま格納されます。 key,value内の%エンコードされた文字はデコードされています。
各種例:
misc/uri/uri.cpp.

HttpStyleUri.h13 行目に定義があります。

関数詳解

nn::nlib::HttpStyleUri::AddBaseUri ( const Uri relative,
const HttpStyleUri base 
)
noexcept

相対パスを基底URIを用いて解決します。

引数
[in]relative相対パス
[in]base基底URI
戻り値
成功した場合はtrue
説明
成功した場合オブジェクトには絶対パスが格納されます。
nn::nlib::HttpStyleUri::AddQuery ( const char *  key,
const char *  value 
)
inlinenoexcept

クエリにキーと値を追加します。

引数
[in]keyキー
[in]value
戻り値
成功した場合はtrue
説明
キーと値の文字列は%エンコードされている必要はありません。

HttpStyleUri.h34 行目に定義があります。

nn::nlib::HttpStyleUri::ComposeString ( char *  buf,
size_t  size 
) const
noexcept

URI文字列を書き出します。

引数
[out]buf文字列が書きだされるバッファへのポインタ
[in]sizeバッファサイズ
戻り値
成功した場合はtrue
説明
内部でToUri()Uri::ComposeString()を利用しています。
nn::nlib::HttpStyleUri::FromUri ( const Uri uri)
noexcept

Uri オブジェクトから変換します。

引数
[in]uriUriオブジェクトへの参照
戻り値
成功した場合はtrue
nn::nlib::HttpStyleUri::GetFragment ( ) const
inlinenoexcept

フラグメント文字列を取得します。

戻り値
フラグメント文字列へのポインタ
説明
取得できるフラグメント文字列は完全にデコードされています。
NULLポインタや空文字列を返す可能性があります。若干意味合いが異なります。

HttpStyleUri.h59 行目に定義があります。

nn::nlib::HttpStyleUri::GetHost ( ) const
inlinenoexcept

ホスト名を取得します。

戻り値
ホスト名

HttpStyleUri.h41 行目に定義があります。

nn::nlib::HttpStyleUri::GetNumQuery ( ) const
inlinenoexcept

キーに対応する値を取得します。見つからなかった場合はNULLを返します。

戻り値
値へのポインタ
説明
キーにはデコードした文字列を与える必要があります。 取得できる値もデコードされた文字列です。

HttpStyleUri.h55 行目に定義があります。

nn::nlib::HttpStyleUri::GetNumSegment ( ) const
inlinenoexcept

格納されているセグメントの数を取得します。

戻り値
セグメントの数

HttpStyleUri.h43 行目に定義があります。

nn::nlib::HttpStyleUri::GetPort ( ) const
inlinenoexcept

ポート番号を取得します。

戻り値
ポート番号

HttpStyleUri.h42 行目に定義があります。

nn::nlib::HttpStyleUri::GetQueryKeyValue ( size_t  i) const
inlinenoexcept

インデックスを指定してキーと値のペアを取得します。見つからなかった場合はNULLを返します。

引数
[in]iインデックス
戻り値
キーと値のペアへの配列
説明
取得できるキーや値の文字列は完全にデコードされています。 また、キーや値がNULLや空文字列である可能性があります。 これは以下のようにクエリ文字列の細かい違いを反映しています。
  • "?...&&..."のような場合はkey = NULL, value = NULLです。
  • クエリが"?...&=&..."のような場合はkey="", value="" です。

HttpStyleUri.h56 行目に定義があります。

nn::nlib::HttpStyleUri::GetQueryValue ( const char *  key) const
inlinenoexcept

キーを指定して値を取得します。見つからなかった場合はNULLを返します。

引数
[in]keyキー文字列
戻り値
値となる文字列

HttpStyleUri.h52 行目に定義があります。

nn::nlib::HttpStyleUri::GetScheme ( ) const
inlinenoexcept

スキーム名を取得します。"http"か"https"のどちらかです。

戻り値
スキーム名

HttpStyleUri.h37 行目に定義があります。

nn::nlib::HttpStyleUri::GetSegment ( size_t  i) const
inlinenoexcept

インデックスを指定してセグメントを取得します。

引数
[in]iセグメントのインデックス
戻り値
セグメントの文字列
説明
セグメントを取得できた場合は文字列へのポインタを、失敗した場合にはNULLを返します。 セグメント文字列はデコードされています。

HttpStyleUri.h46 行目に定義があります。

nn::nlib::HttpStyleUri::GetUserInfo ( ) const
inlinenoexcept

ユーザー情報を取得します。

戻り値
ユーザー情報

HttpStyleUri.h40 行目に定義があります。

nn::nlib::HttpStyleUri::IsPathDirectory ( ) const
inlinenoexcept

パスがディレクトリ形式かどうかを取得します。

戻り値
パスがディレクトリならばtrue
説明
パス文字列が'/'で終わっているかどうかを返します。

HttpStyleUri.h49 行目に定義があります。

nn::nlib::HttpStyleUri::Parse ( const char *  str)
noexcept

URIをパースします。

引数
[in]strURI文字列
戻り値
成功した場合はtrueを返します。
nn::nlib::HttpStyleUri::SetFragment ( const char *  fragment)
noexcept

フラグメント文字列を設定します。

引数
[in]fragmentフラグメント文字列
戻り値
成功した場合はtrue
説明
フラグメント文字列は%エンコードされている必要はありません。
nn::nlib::HttpStyleUri::SetHost ( const char *  host)
noexcept

ホスト名を設定します。%エンコードを施しておく必要はありません。

引数
[in]hostホスト名
戻り値
成功した場合はtrue
nn::nlib::HttpStyleUri::SetPath ( const char *  path)
noexcept

パスを設定します。

引数
[in]pathパス文字列
戻り値
成功した場合はtrue
説明
パスをセグメントに分解して格納します。 デリミタとして'/'を利用します。'\'は利用できません。 また、%エンコードを施しておく必要はありません('/'を除く)。
nn::nlib::HttpStyleUri::SetPort ( int  port)
noexcept

ポート番号を設定します。

引数
[in]portポート番号
戻り値
成功した場合はtrue
説明
オブジェクトの初期化時には80が設定されています。 ポート番号には0から65535までを指定可能です。
nn::nlib::HttpStyleUri::SetQuery ( const char *  query)
inlinenoexcept

クエリ文字列からクエリを設定します。

引数
[in]queryクエリ文字列
戻り値
成功した場合はtrue
説明
クエリ文字列は%エンコードされている必要はありません('&'と'='を除く)。

HttpStyleUri.h32 行目に定義があります。

nn::nlib::HttpStyleUri::SetScheme ( const char *  scheme)
noexcept

スキームを設定します。

引数
[in]schemeスキーム("http"又は"https")
戻り値
成功した場合はtrue
説明
パラメータには"http"か"https"が指定可能です。 "http"を指定した場合にはポート番号が80に設定されます。 "https"を指定した場合にはポート番号が81に設定されます。 オブジェクトの初期化時には"http"が設定されています。
nn::nlib::HttpStyleUri::SetUserInfo ( const char *  userinfo)
noexcept

ユーザー情報を設定します。

引数
[in]userinfoユーザー情報
戻り値
成功した場合はtrue
説明
ホスト名の前にuserinfo@hostnameのように文字列がつくことになります。 通常利用することはないはずです。
nn::nlib::HttpStyleUri::ToUri ( Uri uri) const
noexcept

Uri オブジェクトに変換します。

引数
[out]uriUriオブジェクトへのポインタ
戻り値
成功した場合はtrue

このクラス詳解は次のファイルから抽出されました: