WebRequest

この関数は指定されたサーバにHTTP要求を送信します。この関数には 2 つのバージョンがあります。

1ヘッダの Content-Type: application/x-www-form-urlencoded を使用して型「key=value」の単純なリクエストを送信します。

int  WebRequest(
  const string      method,           // HTTP メソッド
  const string     url,             // URL
  const string     cookie,           // クッキー
  const string     referer,         // リファラ
  int               timeout,         // 時間切れ
  const char       &data[],         // HTTPメッセージ本文の配列
  int               data_size,       // data[] 配列のバイトサイズ
  char             &result[],       // サーバ応答データを含む配列
  string           &result_headers   // サーバ応答ヘッダ
  );

2. 様々な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   // サーバ応答ヘッダ
  );

パラメータ

method

[in]  HTTP メソッド

url

[in]  URL

headers

[in] 「 \r\n」 で改行された「key: value」型のリクエストヘッダ

cookie

[in]  クッキー値

referer

[in]  HTTPリクエストのRefererヘッダー値

timeout

[in]  ミリ秒単位のタイムアウト

data[]

[in]  HTTPメッセージ本文の配列

data_size

[in]  data[] 配列のサイズ

result[]

[out]  サーバ応答データを含む配列

result_headers

[out] サーバ応答ヘッダ

戻り値

エラーのHTTPサーバ応答コードまたは-1

注意事項

WebRequest() 関数を使用するには、「オプション」ウィンドウの「エキスパートアドバイザー(EA)」タブで許可されたURLのリストに必要なサーバのアドレスを追加します。サーバのポートは指定されたプロトコルに基づいて「http://」には 80、「https://」には 443 が自動的に選択されます。

WebRequest() 関数は同期的で、プログラムの実行を停止してリクエストされたサーバからの応答を待機します。指標は 1 つのシンボルのに使用される全ての指標やチャートによって共有される共通のスレッドで実行されるので、応答までに長時間を必要とする場合があるこの関数は、指標からの呼び出しには使用出来ません。シンボルのチャートの 1 つの指標パフォーマンス遅延が、同じシンボルの全てのグラフの更新を停止することになります。

この関数は独自のスレッド内で実行されるエキスパートアドバイザーやスクリプトのみから呼び出すことが出来ます。この関数が指標から呼ばれた場合、GetLastError() はエラー 4014「 Function is not allowed for call(関数呼び出しの許可がありません)」を返します。

WebRequest() はストラテジーテスター内では実行出来ません。

例:

void OnStart()
 {
  string cookie=NULL,headers;
  char   post[],result[];
  string url="https://finance.yahoo.com";
//--- サーバへのアクセスを有効にするには、URL "https://finance.yahoo.com"を
//--- メインメニュ->ツール->オプションの 「エキスパートアドバイザー(EA)」タブの許可されたURLのリストに追加する必要がある
//--- 最後のエラーコードのリセット
  ResetLastError();
//--- Yahoo!ファイナンスからhtmlページを読み込む
  int res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
  if(res==-1)
    {
    Print("Error in WebRequest. Error code  =",GetLastError());
    //--- おそらくURLがリストされていないので、アドレスを追加する必要についてのメッセージを表示する
    MessageBox("Add the address '"+url+"' to the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION);
    }
  else
    {
    if(res==200)
       {
        //--- ダウンロード成功
        PrintFormat("The file has been successfully downloaded, File size %d byte.",ArraySize(result));
        //PrintFormat("Server headers: %s",headers);
        //--- ファイルでのデータ保存
        int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
        if(filehandle!=INVALID_HANDLE)
          {
          //--- result[] 配列の内容のファイルでの保存
          FileWriteArray(filehandle,result,0,ArraySize(result));
          //--- ファイルを閉じる
          FileClose(filehandle);
          }
        else
          Print("Error in FileOpen. Error code =",GetLastError());
       }
    else
        PrintFormat("Downloading '%s' failed, error code %d",url,res);
    }
 }