リファレンス ガイド - リクエストファイル

リクエストファイル記述の構造

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<requests>
	<default>
		...
	</default>
	
	<request>
		<label>...</label>
		<url>...</url>
		<method>...</method>
		<interval>...</interval>
		<headers>
			<header>...</header>
		</headers>
		<params>
			<param>...</param>
		</params>
		<response>
			<header>
				<regexp />
				<getCookieValue />
			</header>
			<getInputValue />
			<regexp />
		</response>
		<cookies>
			<cookie>...</cookie>
		</cookies>
		<useCache>...</useCache>
		<log>...</log>
		<useLog>...</useLog>
		<followRedirects>...</followRedirects>
		<proxy>...</proxy>
	</request>
</requests>

requests

リクエストファイル記述ドキュメントのルートエレメントです。

以下のように、子の<default>と<request>を持ちます。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<requests>
	<default>
		...
	</default>
	
	<request>
		...
	</request>
	
	<request>
		...
	</request>
	
	<request>
		...
	</request>
</requests>

default

各リクエストのデフォルト値を設定します。

各リクエストで共通の値(例えばUser-Agentなど)を使用する場合、
<default>で設定しておくと、各リクエストでその項目を省略することができます。

子のエレメントは<request>と同じすべてのエレメントを持ちます。

パラメーター

encoding [オプション]
リクエストする値を指定された文字セットに変換します。
省略した場合のデフォルト値は"UTF-8"です。
詳しくは <request> をご覧ください。
timeout [オプション]
リクエストのタイムアウト(秒)を設定できます。
詳しくは <request> をご覧ください。
例えば、次のような<default>と<request>があったとします。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<requests>
	<default>
		<url>http://domain.tld/</url>
		<headers>
			<header name="User-Agent">Internet Explorer</header>
		<headers>
		<useLog>true</useLog>
	</default>
	
	<request>
		<label>リクエスト1</label>
	</request>
	
	<request>
		<label>リクエスト2</label>
		<url>http://domain.tld/222/</url>
		<useLog>false</useLog>
	</request>
	
	<request>
		<label>リクエスト3</label>
		<url>http://domain.tld/333/</url>
	</request>
</requests>

この場合、実際のリクエストは以下のようにして振舞われます。

<request>
	<label>リクエスト1</label>
	<url>http://domain.tld/</url> // 追加
	<headers>
		<header name="User-Agent">Internet Explorer</header> // 追加
	<headers>
	<useLog>true</useLog> // 追加
</request>

<request>
	<label>リクエスト2</label>
	<url>http://domain.tld/222/</url> // 上書き
	<headers>
		<header name="User-Agent">Internet Explorer</header> // 追加
	<headers>
	<useLog>false</useLog> // 上書き
</request>

<request>
	<label>リクエスト3</label>
	<url>http://domain.tld/333/</url> // 上書き
	<headers>
		<header name="User-Agent">Internet Explorer</header> // 追加
	<headers>
	<useLog>true</useLog> // 追加
</request>

このように、<default>の値は各リクエストのデフォルトの値となり、
同じものがリクエストで指定された場合、リクエストの値が優先されて使用されます。

request

リクエストの設定を指定します。

各設定は子のエレメントの詳細を確認ください。

パラメーター

encoding [オプション]
リクエストする値を指定された文字セットに変換します。
省略した場合のデフォルト値は"UTF-8"です。
文字セットは "shift-jis"、"cn-gb"、および "iso-8859-1" などがあります。
サポートされている文字セットは こちら を参照ください。
timeout [オプション]
リクエストのタイムアウト(秒)を設定できます。
この値を設定すると、接続は設定した秒数以上の時間が過ぎるとタイムアウトとなり 接続エラーを発生させます。
省略した場合は、デフォルトの20秒となります。
例:
// 通常は Unicode で送信されます
<request>
	<label>リクエスト1</label>
	<url>http://domain.tld/</url>
	<params>
		<param name="user">テスト太郎</header>
	<params>
</request>

// リクエスト1 param 送信結果(UTF-8)
user=%E3%83%86%E3%82%B9%E3%83%88%E5%A4%AA%E9%83%8E



// Shift_JIS で送信する例
<request encoding="shift-jis">
	<label>リクエスト2</label>
	<url>http://domain.tld/</url>
	<params>
		<param name="user">テスト太郎</header>
	<params>
</request>

// リクエスト2 param 送信結果(Shift_JIS)
user=%83e%83X%83g%91%BE%98Y



// Timeout の設定. 接続は5秒以上応答なしの時にエラーとなります。
<request timeout="5">
	<label>リクエスト3</label>
	<url>http://domain.tld/</url>
</request>

label

リクエスト名です。

デフォルト値は"リクエスト名"です。

例:
<label>接続A</label>

url [必須]

送信先のURLを指定します。

"日本語.jp" のような国際化ドメイン名(IDN)は Punycode で指定する必要があります。
Punycode への変換には、公開提供されている各サービスを利用すると便利です。
例えば、Verisign提供のIDN変換ツールなどがあります。
IDN Conversion Tool / 国際化ドメイン名(IDN)転換ツール

HTTP Authentication について。
リクエスト先にBasic認証やDigest認証のあるリクエスト指定された資格情報は、
アプリケーション内のすべてのリクエストに適用されます。
これは、URLに直接( "http://user:password@domain.tld/" のような)資格情報を設定をした場合も同様です。
もし、複数の同時接続で異なる HTTP Authentication を使用したい場合は、
<header> で "Authorization" ヘッダーとその値を設定してください。
詳しくは header項目にある 「HTTP Authentication ヘッダーの指定について。」を参照ください。

※URLでは特に、XMLでの特殊文字に注意してください。

例:
// HTTP接続
<url>http://domain.tld/dir/index.html</url>


// セキュアな接続
<url>https://ssl.domain.tld/</url>


// 国際化ドメインはPunycodeにします
// 例:"http://日本語.jp/"なら、以下の通りです
<url>http://xn--wgv71a119e.jp/</url>


// Port番号8080にアクセスする例です
<url>http://domain.tld:8080/</url>


// Basic認証へのリクエスト例
<url>http://demo:demo@http-request.xsver.com/test/basicauth/</url>


// CGIに type=1 と color=#0000FF の値を付与している例です
// 指定したいURL:
//   http://www.domain.tld/cgi/page.cgi?type=1&color=#0000FF
// 
// この場合 & は &amp; として指定します
// この例のようにXMLでは & のような特殊文字はエスケープを忘れないでください
<url>http://www.domain.tld/cgi/page.cgi?type=1&amp;color=%230000FF</url>

method

RequestMethodを指定します。

"GET"と"POST"をサポートしており、デフォルト値は"GET"です。

例:
<method>GET</method> // GET で送信されます

<method>POST</method> // POST で送信されます

interval

各リクエストの間に挟むインターバルを設定できます。

設定方法は次の2通りです。
  1. N
  2. N-N' (min-max)
※N: 0以上の整数

数字が一つの場合はその秒数を、
ハイフン(-)で2つの数字を繋げて指定した場合は、 左の秒数 から 右の秒数 の間でランダムな秒数をインターバルとして取ります。

デフォルト値は"1-5"です。

例:
<interval>3</interval> // リクエスト終了後、3秒間待機します

<interval>5-30</interval> // 5~30秒の間のいずれかの秒数で待機します

headers

リクエストヘッダーの設定を指定します。
詳細は<header>を確認ください。

リクエストヘッダーを設定します。

アプリケーションでは柔軟性を保つためにリクエストヘッダーのフィールド名のチェックを行いません。
これはつまり、大文字と小文字が厳密に区別されます。
例えば、<default> 内で "HEADER-1" と設定し、 <request> 内で "Header-1" と設定すると、 実際のリクエストヘッダーには "HEADER-1" と "Header-1" の両方が送信されます。
そして、それらが送信される順番は誰にも判りません

"Host" ヘッダーは、通常設定する必要はありません。
"Host" は <url> から自動で抽出され設定されます。

"User-Agent" ヘッダーは、省略された場合 AIR Runtime で使用されているデフォルトの値が設定されます。 (例:"Mozilla/5.0 (Windows; U; ja-JP) AppleWebKit/533.19.4 (KHTML, like Gecko) AdobeAIR/14.0")

"Referer" ヘッダーは、省略された場合空の値が設定されます。
※マルチコア最適化の設定をONにしている場合、空の"Referer" ヘッダーは送信されなくなります。

"Accept" ヘッダーが指定されていない場合は、以下の値が自動で設定されます。
text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, image/png, application/x-shockwave-flash, video/mp4;q=0.9, flv-application/octet-stream;q=0.8, video/x-flv;q=0.7, audio/mp4, */*;q=0.5

"If-None-Match" や "If-Modified-Since" は自動で送信されません。
必要な場合は、レスポンスヘッダーから "ETag" や "Last-Modified" を抽出して
手動で header にセットしてください。

設定されたヘッダー名、値は共に自動でエスケープされません

パラメーター

name [必須]
リクエストヘッダーのフィールド名です。
リクエストヘッダーのフィールド名は大文字小文字を厳密に区別します。
同じ意味合いをもつものであっても、それらは全てリクエストヘッダーに含まれ送信されます。
また、User-Agentに関しては、仮に "User-Agent" と "USER-AGENT" の両方を設定した場合、
どちらが適用されるかはプログラムによって毎回ランダムに決定されるので注意してください。
完全一致したリクエストヘッダーのフィールド名の場合は、
後から宣言される値が前の値を上書きして、その値が適用されます。
例:
// 以下のように大文字小文字で違う名前を設定した場合、
// 両方のリクエストヘッダーが送信されます。
<header name="Connection">keep-alive</header>
<header name="CONNECTION">keep-alive</header>

/// 上記の結果は以下のようになります。
Connection: keep-alive
CONNECTION: keep-alive


// また、User-Agentのような場合、
// どちらの値が適用されるかは誰にもわかりません。
<header name="User-Agent">Internet Explorer</header>
<header name="USER-AGENT">Safari</header>

/// 上記の結果は以下のようになります。
User-Agent: (Internet Explorer または Safari)

以下は基本的なリクエストヘッダーの一例です。

<headers>
	<header name="Accept">text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</header>
	<header name="Accept-Encoding">gzip, deflate</header>
	<header name="Accept-Language">ja,en-us;q=0.7,en;q=0.3e</header>
	<header name="Connection">keep-alive</header>
	<header name="User-Agent">Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36</header>
</headers>

HTTP Authentication ヘッダーの指定について。
アプリケーションがこれをどのように取り扱うかは、
url項目にある 「HTTP Authentication について。」 を参照ください。
アプリケーションは複数の同時接続を行う場合、同じ認証を使用する事になります。
もし、リクエスト個別にHTTP認証への資格情報を必要とする場合は、
"Authorization" ヘッダーとその値を設定します。

例えば、
Basic認証のかかった http://http-request.xsver.com/test/basicauth/
ユーザー名,パスワードが共に"demo"としてアクセスするには、以下のようになります。

// Basic認証へのリクエスト例
<header name="Authorization">Basic ZGVtbzpkZW1v</header>

※この時、ユーザー名とパスワードは ":" を含んだ Base64 で
エンコードされていなければいけない点に注意してください。

params

リクエストで送信するデータを設定できます。

各設定の詳細は<param>を確認ください。

param

リクエストで送信するデータを設定できます。

params のデータは、 <method> の値が GET のときは、 HTTP クエリ文字列シンタックスを使って、設定された値は url の値に追加されます。
その際、nameとvalueは自動でエスケープされます。
元の値が既にエスケープされた文字の場合、二重エスケープになるのでご注意ください。
これを防ぐには、URLに直接指定する方法があります。

<method> の値が POST(または GET 以外の値)のときは、 設定された値は、HTTP リクエストの本文に送信されます。

パラメーター

name
送信するデータの名前です。
これは、多くの場合 <input> の "name" 属性と同じ名前となるでしょう。
name属性を空に設定した場合、送信される値はPayloadになります。
_escape [オプション]
設定された値をエスケープするかを設定できます。
デフォルト値は"true"です。
[重要] もしURLエンコードされた値を送信したい場合はこの設定を"false"にしてください。
これによって、例えば "%2A" が "%252A" として送信されるのを防ぎます。
例:
// mail,password を送信する以下のようなFormの場合
<form method="post" action="/logged_in.php">
	<input type="text" name="mail" />         // mail 入力欄
	<input type="password" name="password" /> // password 入力欄
	
	<input type="submit" value="submit" />
</form>

// このようにしてフォームデータを送信する事が出来ます
<request>
  <url>http://domain.tld/logged_in.php</url>
  <method>POST</method>
  <params>
	<param name="mail">mail@address</param>    // mail 入力データ
	<param name="password">password123</param> // password 入力データ
  </params>
</request>
エスケープの例:
// 次の値は "%2A" と変換され、"*"のデータとして送信されます
<param name="field">*</param>

// 次の値は "%252A" と変換され、"%2A"のデータとして送信されます
<param name="field">%2A</param>

// 次の値は "%2A" のまま "*" のデータとして送信されます
<param name="field" _escape="false">%2A</param>
// Methodが"GET"の場合、自動でURLにエスケープされた値が付与されます
<request>
  <url>http://domain.tld/logged_in.php</url>
  <method>GET</method>
  <params>
	<param name="field">*</param>
	<param name="field2">%2A</param>
  </params>
</request>

// 上記は次のURLとなりアクセスされます
http://domain.tld/logged_in.php?field=%2A&field2=%252A

// field は "%2A"、 field2 は "%252A" となっている点にご注意ください

response

リクエスト先から返ってくるレスポンス(応答ヘッダー,応答本文)に処理を行います。

主に、送られてきたデータから任意の値を取得したい場合に、この機能は利用できます。

[重要]
送られてきたレスポンス本文はシステムによってすべて文字列に変換されます。
その際、この項目に charset 属性が指定されていればその文字セットでエンコードを行います。
charset 属性の指定が無い場合、システムはレスポンスヘッダーの "Content-Type" を参照し、
そこに指定されている "charset" を使用します。
もし、その指定も存在しない場合は、バイナリデータの文字列(utf8)となるので注意してください。

レスポンスヘッダーからの 値の取得は <(response) header> を参照ください。と、
Cookie を取得できる <getCookieValue> などがあります。

レスポンス本文からの値の取得は、
<input>タグの値を取得できる <getInputValue> と、
正規表現を用いて任意の値を取得できる <regexp> があります。
詳しくは、それぞれの項目を参照ください。

パラメーター

charset [オプション]
取得したレスポンスの文字セットを指定できます。
文字セットは "shift-jis"、"cn-gb"、および "iso-8859-1" などがあります。
サポートされている文字セットは こちら を参照ください。
このパラメーターは、多くの場合、レスポンスヘッダーの "Content-Type" に "charset" が指定されていない時に使用する事になるでしょう。
allowView [オプション]
「レスポンス表示」を制御する設定を行えます。
"true" の場合は、レスポンス表示を許可し、"false"の場合はレスポンス表示は動作しません。
デフォルトは"true"です。
例:
// レスポンス本文を "EUC-JP" にして取得する例
<response charset="euc-jp">
</response>

(response) header

リクエスト先から返ってくるレスポンスヘッダーに対する処理設定を行えます。

ここでの動作は >response< 直下に指定されている処理よりも先に処理されます。

ここでは、
正規表現を用いて任意の値を取得できる <(response > header) regexp> と、
Cookie を取得できる <getCookieValue> が利用できます。
詳しくは、それぞれの項目を参照ください。

(response > header) regexp

送られてきた レスポンスヘッダー から任意の値を正規表現を用いて取得します。

この項目は処理が レスポンスヘッダー に対して適用される点と
ヘッダーフィールドを指定できる "field" 属性以外は、
response直下で指定する <regexp> と同じです。

詳しい仕様や使い方は <regexp> を参照ください。

パラメーター

field [オプション]
レスポンスヘッダーのフィールド名を指定できます。
例:
// 次のように一部重複した値が含まれる Response Header が送られてくる場合
Set-Cookie: name=top
Location: http://domain.tld/page?name=mypage


// リクエストヘッダーに対する正規表現の設定はこのようになります
<response>
  <header>
	// "name=" の後に続く文字を抽出する通常の指定方法
	<regexp pattern="name=(.*)" varName="PageName1" />
	
	// リクエストヘッダー "Set-Cookie" に対する指定方法
	<regexp field="Set-Cookie" pattern="name=(.*)" varName="PageName2" />
	
	// リクエストヘッダー "Location" に対する指定方法
	<regexp field="Location" pattern="(.*)" varName="PageName3" />
  </header>
</response>

// 結果 は以下のようになります
{%PageName1%} => "mypage" (レスポンスヘッダーの順番によって値は異なります)
{%PageName2%} => "top"
{%PageName3%} => "mypage"


// 尚、正規表現次第では field属性を指定せずに取得する事も可能です
<regexp pattern="^Location:\s*(?:(?!name=).)*name=(.*)" varName="PageName4" />

// 結果 は以下のようになります
{%PageName4%} => "mypage"

getCookieValue

Cookieの値を取得します。

取得できるCookieは、
その時点で保持しているCookieデータからの取得となります。
取得は、Cookieのdomainを跨って取得する事が可能ですが、
異なる接続で使用されたCookieデータを取得する事は出来ません。
ただし、接続ファイルで同じ <cookieId> を指定してあれば、 異なる接続同士でも可能です。

Cookieの取得は、そのCookie が有効である場合に取得できます。
したがって、 返される Set-Cookie の形式が誤っていたり、
あるいは有効期限が過ぎているものといった、
無効なCookieは取得する事ができませんのでご注意ください。
もし、そのような無効なCookieを取得したい場合は、
response 直下の header 内で正規表現を用いて取得する
<(response > header) regexp> をお使いください。

パラメーター

name [必須]
取得対象の Cookie 名です。
varName [必須]
取得した値を利用する為に使われる変数名です。
ここで設定された変数名は、"{%" と "%}" で挟む事によって利用できます。
例えば、varName="MAIL" なら、 {%MAIL%} として使えます。
path [オプション]
取得する Cookie の Path を指定します。
Cookie は name が同じでも path が異なればそれらは別々のCookieとして扱われ保存されるので、 同一Cookie名が複数ある場合はこのオプションを使用してください。
domain [オプション]
取得する Cookie の domain を指定します。
省略した場合は現在アクセス中のURLのdomainとなります。
Cookie は name が同じでも domain が異なればそれらは別々のCookieとして扱われ保存されるので、 同一Cookie名が複数ある場合はこのオプションを使用してください。
_unescape [オプション]
取得したCookieの値(Value)をアンエスケープして変数に収めるかどうかを設定します。
デフォルト値は"false"です。
もし、アンエスケーした値を取得したい場合は、
この項目に "true" を設定してください。Cookieの値はアンエスケープして取得されます。
例:
// http://www.domain.tld/ から以下の Set-Cookie が返るとします
Set-Cookie: username=UserName

// これらは同じCookie名ですが、別々なものとして扱われ保存されます
Set-Cookie: type=1; path=/
Set-Cookie: type=2; path=/dir
Set-Cookie: type=3; domain=domain.tld
Set-Cookie: type=4; path=/dir domain=domain.tld

// このCookieは過去の有効期限なので保存されず、取得もできません
Set-Cookie: accessed=; expires=Thu, 01 Jan 1970 12:00:00 GMT


// このようにして取得できます
<response>
  <header>
    <getCookieValue name="username" varName="UserName" />
    
    <getCookieValue name="type" path="/" varName="T1" />
    <getCookieValue name="type" path="/dir" varName="T2" />
    <getCookieValue name="type" domain="domain.tld" varName="T3" />
    <getCookieValue name="type" path="/dir" domain="domain.tld" varName="T4" />
  </header>
</response>


// 結果 は以下のようになります
{%UserName%} => "UserName"
{%T1%} => "1"
{%T2%} => "2"
{%T3%} => "3"
{%T4%} => "4"

_unescape を使用した例:

// "test=テスト" のCookie
Set-Cookie: test=%E3%83%86%E3%82%B9%E3%83%88

// 通常、値は保存されたままの値が取得されます
<getCookieValue name="test" varName="Test" />

// 16進文字をアンエスケープして取得した場合
<getCookieValue name="test" varName="Test2" _unescape="true" />

// 結果 は以下のようになります
{%Test%} => "%E3%83%86%E3%82%B9%E3%83%88"
{%Test2%} => "テスト"

getInputValue

送られてきたレスポンス本文から inputタグ の値(value)を取得します。

この機能は、 "name" 属性の値と一致する 最初の <input> の "value" の値 を取得できます。

※取得できるのはレスポンス本文に存在する input の "value" 値です。
例えばJavaScriptによって "value" の値が動的に設定されるものや、
動的に生成される <input> の値は取得できないのでご注意ください。

パラメーター

name [必須]
取得対象の input 名です。
varName [必須]
取得した値を利用する為に使われる変数名です。
ここで設定された変数名は、"{%" と "%}" で挟む事によって利用できます。
例えば、varName="MAIL" なら、 {%MAIL%} として使えます。

次の例では、フォームにある非表示データのトークン値を取得して、
フォーム送信のリクエストを成功させる方法を記しています。

フォームページのHTML(レスポンス本文の内容):
// http://domain.tld/form.php
<!DOCTYPE html>
<html>
<head>
	<title>フォームページ</title>
</head>
<body>
<h1>ログインしてください</h1>
<form method="post" action="/logged_in.php">
	// ランダムな値が埋め込まれている非表示データ
	<input type="hidden" name="token" value="oskz9jshn7h6ajsx2s" />
	
	<input type="text" name="mail" />
	<input type="password" name="password" />
	
	<input type="submit" value="submit" />
</form>
</body>
</html>

フォームページからトークン値を取得:
// token の値を取得するリクエスト
<request>
  <label>リクエスト-取得</label>
  <url>http://domain.tld/form.php</url>
  <method>GET</method>
  <response>
  
    // 取得したい input と一致する name を指定します
	<getInputValue name="token" varName="GetToken" />
	
  </response>
</request>

フォーム先へデータを送信:
// token の値を取得するリクエスト
<request>
  <label>リクエスト-送信</label>
  <url>http://domain.tld/logged_in.php</url>
  <method>POST</method>
  <params>
	// 取得した値は varName で設定した変数名で使用できます
	<param name="token">{%GetToken%}</param>
	
	<param name="mail">mail@address</param>
	<param name="password">password123</param>
  </params>
</request>

regexp

送られてきた応答本文から任意の値を正規表現を用いて取得します。

正規表現のルールは、お使いの AIR Runtime のバージョンが対応しているものとなり、 通常は一般的に使用されている JavaScript の正規表現ルールと等価です。

この項目ではレスポンス本文に対して処理が行われます。
もし、レスポンスヘッダー に対して処理を行いたい場合は、
<(response > header) regexp> を使用してください。

パラメーター

pattern [必須]
正規表現のパターンです。
※XMLでの特殊文字には特に注意してください。
varName [必須]
取得した値を利用する為に使われる変数名です。
ここで設定された変数名は、"{%" と "%}" で挟む事によって利用できます。
例えば、varName="MAIL" なら、 {%MAIL%} として使えます。
複数マッチを指定した場合やグローバルオプション"g" をつけた場合、
変数名を カンマ"," で区切る事によって複数の結果を取得できます。
flag [オプション]
正規表現の修飾子です。
以下が利用できます。
修飾子説明
i 大文字、小文字を区別しない
m ^と$を文字列の改行の前後に一致させる
g 全て検索
_unescape [オプション]
正規表現で取得した値をアンエスケープして変数に収めるかどうかを設定します。
デフォルト値は"false"です。
例えば、JSONから値を取得する際に、Unicode文字を変換したい場合に"true"を設定してください。
※このオプションは、Unicode文字だけではなく、特殊文字も変換されます。
例:
// 以下のようなレスポンスが返る場合、
<html>
<head>
	<title>テストページ</title>
</head>
<body>
<h1>テストページ</h1>
<div>
	<a href="/page?name=top" title="トップ">トップへ</a>
	<A HREF="/page?name=mypage" TITLE="マイページ">マイページへ</A>
	<a href="/page?name=help" title="ヘルプ">ヘルプへ</a>
</div>
</body>
</html>


// このようにして取得できます
<response>
	// XMLでは特殊文字である "<" は "&lt;" に, """ は "&quot;" にしなければいけない点に注意してください。
	<regexp pattern="&lt;a\shref=&quot;([^&quot;]+)&quot;" flag="i" varName="GetHref" />
	
	// "g" を使用して複数取得するにはカンマ","を利用して複数の変数名を設定できます
	<regexp pattern="&lt;a\shref=&quot;([^&quot;]+)&quot;" flag="ig" varName="Href1, Href2, Href3" />
</response>


// 結果 は以下のようになります
{%GetHref%} => "/page?name=top"  // 最初にマッチしたものとなります
{%Href1%} => "/page?name=top"    // "g" 指定した場合、マッチした順に変数に格納されます
{%Href2%} => "/page?name=mypage"
{%Href3%} => "/page?name=help"

複数マッチの具体例:
// 下記の response に対して、
"abc123def456ghi789jkl012"


// このように設定して取り扱うことができます
<regexp pattern="([a-z]+)[0-9]+([a-z]+)[0-9]+" varName="var1, var2" />

// 結果
{%var1%} => "abc"
{%var2%} => "def"


// "g" 修飾子をつけた場合は、先頭から順番に変数が埋められていきます
<regexp pattern="([a-z]+)[0-9]+([a-z]+)[0-9]+" flag="g" varName="var1,var2,var3,var4" />

// 結果
{%var1%} => "abc"
{%var2%} => "def"
{%var3%} => "ghi"
{%var4%} => "jkl"

_unescape を使用した例:

// JSONの値を取得する例
// このJSONは、{key:"名前", value:"テスト太郎"} という値を持ちます
{key:"\u540d\u524d",value:"\u30c6\u30b9\u30c8\u592a\u90ce"}

// 通常の場合、取得した値は "\u540d\u524d" がセットされます。
<regexp pattern="key:\&quot;(.*)\&qupt;" varName="key" />

// _unescapeを使うと、取得した値は "名前" がセットされます。
<regexp pattern="key:\&quot;(.*)\&qupt;" varName="key" _unescape="true" />

cookies

各Cookieの設定を指定します。
詳細は<cookie>を確認ください。

Cookieをセットします。

ここでセットされるCookieは、単にその値をCookieヘッダーで送信するのではなく、
アプリケーション上にCookieデータを保存します。
もし、単にCookieヘッダーを送信したい場合は、
リクエストヘッダー<header>にCookieを指定して直接送信してください。

Cookieのセットは、一般的なブラウザと同じように処理されます。
リクエスト先ドメインの有効範囲外になるドメインは無視されますが、
"httponly"属性へのアクセスは可能です。

Cookieの削除は、expires属性に過去の日付を指定する事で可能となります。
ただし、path属性やdomein属性が一致している必要がある点に注意してください。
Cookieは、Cookie名が同一でもpath属性やdomain属性が異なっていれば
別物として扱われるためです。

パラメーター

name [必須]
Cookie名です。
expires [オプション]
Cookieの有効期限です。
日付形式か、 1970年1月1日0 時(UTC)からのミリ秒を指定できます。
この項目を省略した場合、有効期限はアプリケーションの終了までとなります。
値を指定をした場合、値はシステムで自動的にグリニッジ標準時間(GMT)に変換されます。
もし、値に正しくない形式を指定して自動変換できない場合、この項目は省略されます。
また、値が現在時刻よりも過去のものであれば、Cookieは削除されます。
path [オプション]
Cookieを有効としたいパスを指定します。
値は、"/"から始まる url-path である必要があり、
そうでないものや省略した場合はリクエストURLの default-path が設定されます。
domain [オプション]
Cookieを有効としたいドメインを指定します。
domain属性を指定したCookieは、指定のホストおよびそのサブドメインのホストに送信されます。
この項目を省略した場合、Cookieはリクエスト先のホストのみに送信されます。
※セキュリティ上、有効範囲外のドメインや Public Suffix [※1] に対してのdomainは無視されます。
secure [オプション]
セキュアな接続の場合にのみCookieを有効としたい場合は "true" を設定します。
httponly [オプション]
"true" を設定すると、そのCookieは HTTP を通してのみアクセスできるようになります。
これは本来、その仕様上 "non-HTTP" APIs からの設定は行えませんが、
本アプリケーションではその制約を解無視して設定する事ができます。
_escape [オプション]
Cookieの値(Value)をエスケープするかを設定できます。
デフォルト値は"true"です。
通常、この項目を設定する必要はありません。
Cookieの値に含まれる特別な文字はシステムによって自動的に16進文字にエンコードされます。
もし、値をエスケープせずに直接使用したい場合は、
この項目に "false" を設定してください。Cookieの値はそのまま使用されます。

正しい例:

<request>
<url>http://http-request.xsver.com/test/</url>
<cookies>
	// "Test 1"の値を持つ"test1"という名前のCookieがセットされます
	<cookie name="test1">Test 1</cookie>
	
	// 有効期限が 2015年1月23日 01時23分45秒 までのCookieをセットします
	<cookie name="test2" expires="2015/01/23 01:23:45">Test 2</cookie>
	
	// 有効期限が現在よりも過去なので、Cookie "test2" は削除されます
	<cookie name="test2" expires="1970/1/1"></cookie>
	
	// Domain属性を指定した場合、
	// 指定のホストおよびそのサブドメインのホストに送信されます
	// このCookieは"xsver.com"と"*.xsver.com"で利用されます
	<cookie name="test3" domain="xsver.com">Test 3</cookie>
	
	// このCookieは"%83e%83X%83g%81%40%92l"の値がそのまま送信されます
	<cookie name="test4" _escape="false">%83e%83X%83g%81%40%92l</cookie>
</cookies>
</request>

誤った例:

// このような有効期限の形式は認識しません。
<cookie name="id" expires="2013年1月23日">Value</cookie>
<cookie name="id" expires="2013/1/23">Value</cookie> // 全角はNG


<request>
// このリクエスト先のホストに対して、
<url>http://http-request.xsver.com/test/</url>
<cookies>
	// このような、異なるホストへの設定はできません
	<cookie name="id" domain="www.xsver.com">Value</cookie>
	<cookie name="id" domain="sub.http-request.xsver.com">Value</cookie>
	<cookie name="id" domain="example.com">Value</cookie>
</cookies>
</request>


// Public Suffix List に無いドメインは設定できません
<cookie name="id" domain="127.0.0.1">Value</cookie>
<cookie name="id" domain="www.example.aaa">Value</cookie>

// Public Suffix への設定はできません
<cookie name="id" domain="com">Value</cookie>
<cookie name="id" domain=".jp">Value</cookie>
<cookie name="id" domain="tokyo.jp">Value</cookie>
<cookie name="id" domain="adachi.tokyo.jp">Value</cookie>

// ただし、"localhost"は例外で許可されます
<cookie name="id" domain="www.example.localhost">Value</cookie> // OK

useCache

リクエストにCache機能を使用するかどうかを設定できます。

デフォルト値は "false" です。

"true" を設定すると、 リクエスト時、データを取得する前に、ローカルキャッシュを参照します。
また、リクエストに対する正常な応答データをキャッシュします。
その際、アプリケーションはオペレーティングシステムの HTTP キャッシュを使用します。

log

ログ出力を設定できます。

ログ出力方法は、 この項目の"level"を 1 にするか、
アプリケーションで「Log出力をON」に設定する事で出力されます。
また、アプリケーションでの出力設定をONにした場合、"level"が 0 でも出力されます。

通常、出力されるログは、
各接続とリクエストの設定と、リクエスト情報と、レスポンスヘッダー、レスポンス本文 となり、
接続ファイル名と各接続ラベル名、各リクエスト名が合わさったファイル名として ログフォルダ内に保存されます。

また、output属性にて出力する各項目を選択できます。
特に、"custom"では任意の文字列や取得した変数を出力したい場合に便利です。

パラメーター

name [オプション]
出力ファイル名です。
※設定がない場合は、自動でファイル名が設定されます。
level [オプション]
ログ出力のレベルです。
-1,0,1 を設定することが出来ます。
 1: ログを出力します。
 0: ログは出力しませんが、アプリケーションの「Log出力」を設定した場合ログが出力されます。
-1: ログは出力されません。
※デフォルトは "0" です。
mode [オプション]
ログ出力の方法です。
上書きと追記が選べます。
w: ログは常に上書きで出力されます。
a: ログは末尾に追記されます。
※デフォルトは "w" です。
output [オプション]
各項目の個別ログ出力設定です。
設定した項目が出力されます。
label  : 接続の設定情報が出力されます。
request: リクエスト情報が出力されます。
header : リクエストヘッダー情報が出力されます。
body   : リクエスト本文情報が出力されます。
custom : 任意の文字列が出力されます。
※デフォルトは "label,request,header,body,custom" です。


ログ出力設定の例:

// "test.log"というファイル名で出力
<log name="test.html" level="1"></log>


// 常に追記で出力
<log level="1" mode="a"></log>


// すべての項目を出力
<log level="1"></log>
// または
<log level="1" output="label,request,header,body,custom"></log>

// レスポンス本文のみを出力
<log level="1" output="body"></log>

// リクエストとレスポンス本文のみを出力
<log level="1" output="request,body"></log>


// 任意の文字列を出力
<log level="1" output="custom">テスト</log>
	
// 任意の文字列(変数)を出力
<log level="1" output="custom">{%TEST%}</log>

useLog

[廃止予定]
この項目は廃止予定です。
この代わりに <log> を 使用してください。

ログを出力する設定です。

"true" を設定すると、そのリクエストのログを出力します。
ログファイルについては接続ファイルの <logFileName> を参照ください。

例:
// このリクエストのログを出力します
<request>
	<url>http://domain.tld/</url>
	<method>GET</method>
	<useLog>true</useLog>
</request>


// <default>に指定すれば、全リクエストに適用できます
<default>
	<useLog>true</useLog>
</default>

followRedirects

自動でリダイレクトを追従するかどうかを設定します。

デフォルト値は "true" です。

リダイレクトのあるページのレスポンスは、 すべてのリダイレクトが完了した後のレスポンスとなります。 したがって、<response> 内の処理は、 最終的に表示されるレスポンスの内容に対して処理されるという事に注意してください。 これは <response> 内にある <header> 内等も同様です。

例えば、Location ヘッダーが返されるページのレスポンスから任意の値を取得しようとしても、 Location 先のページ(更にその先のページに Locatin が指定されていればその先のページ)に 対して値の取得処理が実行されます。
もし、リダイレクト前に値を抽出する必要がある場合は、 この項目に "false" を設定して自動リダイレクトをOFFにしてください。
ただし、この場合は自動でリダイレクトを追従しないので、 必要ならば手動でリダイレクト先のリクエストを追加設定する必要があります。

次の例では、変動的な Location 指定のあるページの Set-Cookie の値を取得する目的の為、
手動でリダイレクトを追従する設定をしてリクエストしています。

// 例えば、 http://domain.tld/ というサイト上で、
// /page -> /page?a=xxx -> /result.html (xxxはランダムな文字)
// と、リダイレクト処理がなされているページの場合、以下のようになります

// http://domain.tld/page へアクセス
<request>
	<url>http://domain.tld/page</url>
	<response>
		<header>
			// レスポンスヘッダーの Location の値を取得
			<regexp pattern="Location\:\s*(.+)" flag="i" varName="nextURL" />
			
			// 必要ならここで Cookie 等の値を取得します
			
		</header>
	</response>
</request>

// http://domain.tld/page?a=xxx へアクセス
<request>
	// 取得したリダイレクト先を設定します
	<url>{%nextURL%}</url>
	<headers>
		// 必要ならばリファラー(参照元)を設定します
		<header name="Referer">http://domain.tld/page</header>
	</headers>
	<response>
		<header>
			// 更に次のリダイレクト先を取得
			<regexp pattern="Location\:\s*(.+)" flag="i" varName="nextURL-2" />
			
			// 必要ならここで Cookie 等の値を取得します
			
		</header>
	</response>
</request>

// http://domain.tld/redirect2 へアクセス
<request>
	<url>{%nextURL-2%}</url>
	<headers>
		// 前回リダイレクト先となっていたURLがリファラーとなります
		<header name="Referer">{%nextURL%}</header>
	</headers>
</request>

proxy

Proxyを介して接続を行うことができます。

この設定は、「接続のマルチスレッド化を使用する」をONにしている場合にのみ適用されます。
OFFの場合はProxyを利用できません。
また、現在は"HTTP"接続のみをサポートしており、"HTTPS"へのProxy接続はできません。

Proxyは、"<ProxyHost>:<ProxyPort>"
または、 "<User>:<Pass>@<ProxyHost>:<ProxyPort>"
または、 "<type>://<User>:<Pass>@<ProxyHost>:<ProxyPort>" の形式で設定できます。

パラメーター

type [オプション]
Proxyの種類を設定できます。
現在、"HTTP"または"SOCKS5"をサポートしてます。
"SOCKS5"を利用する際に要求される認証へのログインは現在未サポートです。
※デフォルトは "HTTP" です。

例:

// Proxy の設定例
<request>
	<url>http://domain.tld/page</url>
	<method>GET</method>
	<proxy>proxy.host:8080</proxy>
</request>

// 次のようにIPアドレスでの指定も可能です
<proxy>192.168.0.100:8080</proxy>


// Proxy接続にBasic認証を伴う場合は、次のようにID,PWを含めてください
<proxy>user1:pass1234@proxy.tld:3128</proxy>


// "SOCKS5 Proxy" を利用する場合
<proxy type="socks5">127.0.0.1:8888</proxy>

// または、このように設定も出来ます
<proxy>socks5://127.0.0.1:8888</proxy>