WebRequest

함수는 지정된 서버로 HTTP 요청을 보냅니다. 함수에는 두 가지 버전이 있습니다.

1. 헤더 Content-Type: application/x-www-form-urlencoded 를 사용해 "key=value" 유형의 단순 호출을 전송합니다.

int  WebRequest(
   const string      method,           // HTTP method 
   const string      url,              // URL
   const string      cookie,           // cookie
   const string      referer,          // referer
   int               timeout,          // 타임아웃
   const char        &data[],          // HTTP 메시지 본문의 배열
   int               data_size,        // data[] 배열의 바이트 크기
   char              &result[],        // 서버 응답 데이터를 포함하는 배열
   string            &result_headers   // 서버 응답 헤더
   );

2. 다양한 웹 서비스와 보다 유연한 상호 작용을 위해 커스텀 헤더 집합을 지정하는 모든 유형의 요청을 보냅니다.

int  WebRequest(
   const string      method,           // HTTP method
   const string      url,              // URL
   const string      headers,          // headers 
   int               timeout,          // 타임아웃
   const char        &data[],          // HTTP 메시지 본문의 배열
   char              &result[],        // 서버 응답 데이터를 포함하는 배열
   string            &result_headers   // 서버 응답 헤더
   );

Parameter

method

[in]  HTTP 메소드.

url

[in]  URL.

headers

[in]  줄 바꿈 "\r\n"으로 구분된 "key: value" 유형의 헤더 요청.

cookie

[in]  쿠키 값.

referer

[in]  HTTP 요청의 레퍼러 헤더 값.

timeout

[in]  밀리세컨드 단위 타임아웃.

data[]

[in]  HTTP 메시지 본문의 데이터 배열.

data_size

[in]  data[] 배열의 사이즈.

result[]

[out]  서버 응답 데이터를 포함하는 배열.

result_headers

[out] 서버 반응 헤더.

반환값

HTTP 서버 응답 코드 또는 오류에대해 -1.

참고

WebRequest() 기능을 사용하려면, "Options" 창의 "Expert Advisors" 탭에 있는 허용된 URL 목록에 필요한 서버의 주소를 추가하십시오. 서버 포트는 지정된 프로토콜에 따라 자동으로 선택됩니다. - "http://"의 경우 80, "https://"의 경우 443.

WebRequest() 함수는 동기식이며, 이는 프로그램이 프로그램 실행을 중단하고 요청한 서버의 응답을 기다린다는 것을 의미합니다. 응답 수신 지연이 클 수 있으므로, 지표 모든 지표와 차트가 하나의 심볼에 공유하는 공통 스레드에서 실행되므로 지표의 호출에 대해 함수를 사용할 수 없습니다. 심볼 차트 중 하나에 대한 지표 성능 지연으로 인해 동일한 심볼을 가진 모든 차트의 업데이트가 중지될 수 있습니다.

이 함수는 자체 실행 스레드에서 실행되므로 Expert Advisor 및 스크립트에서만 호출할 수 있습니다. 지표에서 함수를 호출하려고 하면, GetLastError()가 오류 4014 – "호출을 허용하지 않는 함수입니다"를 반환합니다.

WebRequest()는 Strategy Tester에서 실행될 수 없습니다.

예:

void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   string url="https://finance.yahoo.com";
//--- 서버에 대한 액세스를 설정하려면 URL "https://finance.yahoo.com"을 추가해야 합니다.
//--- 허용된 URL 목록(메인 메뉴->도구->옵션, "Expert Advisors" 탭):
//--- 마지막 오류 코드 재설정
   ResetLastError();
//--- Yahoo Finance에서 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("다음 주소를 추가하십시오 '"+url+"'을 'Expert Advisors' 탭의 허용된 URL 목록에","Error",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- 다운로드 성공
         PrintFormat("파일이 성공적으로 다운로드 되었음, 파일 크기 %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("FileOpen 에러. Error code =",GetLastError());
        }
      else
         PrintFormat("다운로드 '%s' 실패, 에러 코드 %d",url,res);
     }
  }