WebRequest

指定されたサーバーに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-INHTTPメソッド
url-INURL
headers-IN改行("\n","\r")で区切られたリクエストヘッダのタイプ(key:value)
cookie-INCookie値
timeout-INタイムアウト(msec単位)
data[]-INHTTPメッセージ本体の配列
data_size-INdata[]のサイズ(バイト単位)
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());
        }
    }
}   

Twitterでフォローしよう

おすすめの記事