![WebRequest](https://celebpanda.com/wp/wp-content/uploads/2021/05/WebRequest.jpg)
指定されたサーバーにHTTPリクエストを送信します。
WebRequest
Content-Type:application/x-www-form-urlencodedヘッダを使用した"key=vaule"タイプのシンプルなリクエスト送信
int WebRequest(
const string method, // HTTPメソッド
const string url, // URL
const string cookie, // cookie
const string referer, // リファラ
int timeout, // タイムアウト
const char &data[], // HTTPメッセージ本体の配列
int data_size, // data[]配列のサイズ(バイト単位)
char &result[], // サーバーの応答データを含む配列
string &result_headers // サーバー応答のヘッダ
);
様々なWebサービスとより柔軟な相互作用のヘッダーのカスタムセットを指定するリクエスト送信
int WebRequest(
const string method, // HTTPメソッド
const string url, // URL
const string headers, // ヘッダー
int timeout, // タイムアウト
const char &data[], // HTTPメッセージ本体の配列
char &result[], // サーバーの応答データを含む配列
string &result_headers // サーバー応答のヘッダ
);
- 引数
引数名 | 初期値 | I/O | 詳細 |
method | - | IN | HTTPメソッド |
url | - | IN | URL |
headers | - | IN | 改行("\n","\r")で区切られたリクエストヘッダのタイプ(key:value) |
cookie | - | IN | Cookie値 |
timeout | - | IN | タイムアウト(msec単位) |
data[] | - | IN | HTTPメッセージ本体の配列 |
data_size | - | IN | data[]のサイズ(バイト単位) |
result[] | - | OUT | サーバーの応答データを含む配列 |
result_headers | - | OUT | サーバー応答のヘッダ |
- 戻り値
HTTPサーバーの応答コードを返します。
エラーの場合は-1を返します。
- その他
WebRequest()関数を使用し、
ターミナルオプションの「エキスパートアドバイザー」タブで許可されたURLリストに
必要なサーバーのアドレスを追加します。
サーバーポートは指定されたプロトコルに基づいて自動的に選択されます。
80 :"https://"
443:"https://"
WebRequest()関数は同期です。
これはプログラム実行の一時中断やリクエストサーバーからの応答を待つ事を意味します。
応答受信の遅延が大きくなる可能性があるので、
WebRequest()関数関数はインジケータからの呼び出しには使用できません。
インジケータは1通貨ペアのチャート上の全てのインジケータによって共有される共通スレッドで実行される為、
1通貨ペアのチャートのインジケータパフォーマンスの遅延は、
同じ通貨ペアの全てのチャートの更新を停止します。
インジケータ関数から呼び出そうとした場合、
GetLastError()はエラー4060(ERR_FUNCTION_NOT_CONFIRMED)を返します。
WebRequest()関数はEAとスクリプトから呼び出す事が出来ます。
EAとスクリプトは独自のスレッドで実行しています。
ストラテジーテスターでは使用出来ません。
- サンプル
void OnInit(){
string cookie=NULL,headers;
char post[],result[];
int res;
// FXCMジャパン証券の経済指標カレンダーのサイトデータを取得
string req_url = "https://www.fxcm.co.jp/market/indicators/index.php";
res = WebRequest(
"GET", // HTTPメソッド
req_url, // URL
cookie, // cookie
NULL, // リファラ
5000, // タイムアウト
post, // HTTPメッセージ本体
0, // HTTPメッセージサイズ
result, // 応答データ配列
headers // 応答ヘッダ
);
if (res == -1) {// エラーチェック
Print("WebRequesエラー。 エラーコード =",GetLastError());
MessageBox(
"ターミナルオプションの「エキスパートアドバイザータブ」の設定で\n '"
+req_url
+"' \nのURLを\n「Allow WebRequest for listed URL」のリストに追加して下さい。"
,"HTTPリクエストエラー"
,MB_ICONINFORMATION);
} else {
PrintFormat("ロード成功。 取得ファイルサイズ =%d [KB]",ArraySize(result)/1024);
int filehandle = FileOpen("FXCM_ECOFILE.htm", FILE_WRITE|FILE_BIN); // 取得データ保存用のファイルを作成
if( filehandle != INVALID_HANDLE) { // ファイルハンドラチェック
FileWriteArray(filehandle,result,0,ArraySize(result)); // 取得データをファイルに書き込み
FileClose(filehandle); // ファイルハンドラ解放
} else {
Print("FileOpenエラー。 エラーコード=",GetLastError());
}
}
}