WebRequest

Fonksiyon, belirtilen bir sunucuya bir HTTP isteği gönderir. Fonksiyon iki versiyona sahiptir:

1. Basit istekler "key=value" türünde gönderme Content-Type: application/x-www-form-urlencoded başlığını kullanarak.

int  WebRequest(
   const string      method,           // HTTP metodu 
   const string      url,              // URLbaşlıklar
   const string      cookie,           // çerez
   const string      referer,          // başvurucu
   int               timeout,          // zaman aşımı
   const char        &data[],          // HTTP mesaj gövdesinin dizisi
   int               data_size,        // data[] dizi boyutu bayt cinsinden
   char              &result[],        // sunucu yanıt verisini içeren bir dizi
   string            &result_headers   // sunucu yanıt başlıkları
   );

2. Çeşitli Web hizmetleriyle daha esnek bir etkileşim için özel başlık kümelerini belirten herhangi bir türden istek göndermek.

int  WebRequest(
   const string      method,           // HTTP metodu
   const string      url,              // URLbaşlıklar
   const string      headers,          // başlıklar
   int               timeout,          // zaman aşımı
   const char        &data[],          // HTTP mesaj gövdesinin dizisi
   char              &result[],        // sunucu yanıt verisini içeren bir dizi
   string            &result_headers   // sunucu yanıt başlıkları
   );

Parametreler

method

[in]  HTTP metodu.

url

[in]  URL.

headers

[in]  Request headers of type "key: value" türünde başlıklar isteği, "\r\n" satır sonu ile ayrılmış.

cookie

[in]  Çerez değeri.

referer

[in]  HTTP isteğinin Başvurucu başlığının değeri

timeout

[in]  Milisaniye cinsinden zaman aşımı.

data[]

[in]  HTTP mesaj gövdesinin veri dizisi.

data_size

[in]  daata[] dizininin boyutu.

result[]

[out]  Sunucu yanıt verisini içeren bir dizi.

result_headers

[out] Sunucu cevap başlıkları.

Dönüş değeri

HTTP sunucusu yanıt kodu veya bir hata için -1.

Not

WebRequest () işlevini kullanmak için, gerekli sunucuların adreslerini "Seçenekler" penceresinin "Uzman Danışmanlar" sekmesinde izin verilen URL'ler listesine ekleyin. Sunucu portu, belirtilen protokol temelinde otomatik olarak seçilir - "http://" için 80 ve "https://" için 443.

WebRequest() onksiyonu senkronize edilir, yani programın çalışmasını bozar ve istenen sunucudan yanıt bekler. Bir yanıt almadaki gecikmeler büyük olabileceğinden, fonksiyonlar göstergelerden gelen çağrılar için mevcut değildir, çünkü göstergeler tüm semboller ve grafikler tarafından tek bir sembolde paylaşılan ortak bir iş parçacığında çalışır. Bir sembolün grafiklerinden birinde göstergenin performans gecikmesi, aynı sembolün tüm grafiklerinin güncellenmesini durdurabilir.

Fonksiyon, kendi yürütme dizilerinde çalıştıkları için yalnızca Uzman Danışmanlar ve komut dosyalarından çağrılabilir. Bir göstergeden fonksiyonu çağırmaya çalışırsanız, GetLastError() Hata 4014 dönecektir– "Fonksiyona izin verilmiyor".

WebRequest(), Strateji Testerda yürütülemez.

Örnek:

void OnStart()
  {
   string cookie=NULL,headers;
   char   post[],result[];
   string url="https://finance.yahoo.com";
//--- Sunucuya erişimi etkinleştirmek için "https://finance.yahoo.com" URL’si eklemelisiniz.
//--- izin verilen URL'ler listesine (Ana Menü->Araçlar->Seçenekler, "Uzman Danışmanlar" sekmesi):
//--- Son hata kodunu sıfırlama
   ResetLastError();
//--- Yahoo Finans'dan bir html sayfası indirme
   int res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
   if(res==-1)
     {
      Print("Error in WebRequest. Error code  =",GetLastError());
      //--- Belki de URL listelenmemiş, adresi eklemenin gerekliliği hakkında bir mesaj görüntülüyor
      MessageBox("Adresi ekleyin '"+url+"' 'Uzman Danışmanlar' sekmesindeki izin verilen URL’lerin listesine,"Hata",MB_ICONINFORMATION);
     }
   else
     {
      if(res==200)
        {
         //--- İndirme başarılı
         PrintFormat("Dosya başarılı bir şekilde indirildi, Dosya boyutu %d byte.",ArraySize(result));
         //PrintFormat("Server headers: %s",headers);
         //--- Datayı bir doyaya kaydetme
         int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
         if(filehandle!=INVALID_HANDLE)
           {
            //--- Sonuç[] dizisinin içeriğini bir dosyaya kaydetme
            FileWriteArray(filehandle,result,0,ArraySize(result));
            //--- Dosyayı kapatma
            FileClose(filehandle);
           }
         else
            Print("Error in FileOpen. Error code =",GetLastError());
        }
      else
         PrintFormat("Downloading '%s' failed, error code %d",url,res);
     }
  }