Aracılığıyla paylaş


Betik Kullanarak Veri Alma

Bu konu, Microsoft Windows HTTP Hizmetleri (WinHTTP) aracılığıyla zaman uyumlu veya zaman uyumsuz olarak veri alan bir betiğin nasıl yazıldığını gösteren bir örnek içerir. Bu örnekte açıklanan kavramlar, HTTP protokollerini kullanarak verilere erişim gerektiren istemci veya orta katman sunucu uygulamaları yazmanın temelini sağlar.

Önkoşullar ve Gereksinimler

Microsoft JScript'in çalışan bilgilerine ek olarak, bu örnek aşağıdakileri gerektirir:

  • Microsoft Windows Yazılım Geliştirme Seti'nin (SDK) geçerli sürümü.
  • İnternet bağlantınız bir ara sunucu üzerindenyse, Microsoft Windows HTTP Hizmetleri (WinHTTP) için ara sunucu ayarlarını oluşturmak için ara sunucu yapılandırma aracı. Daha fazla bilgi için bkz. ProxyCfg.exeara sunucu yapılandırma aracı.
  • ağ terminolojisi ve kavramları hakkında bilgi.

Verileri Zaman Uyumlu Olarak Alma

Web sayfasından metni zaman uyumlu bir şekilde alan bir betik oluşturmak için aşağıdakileri yapın:

  1. Bir metin düzenleyicisi açın.

  2. Aşağıdaki kodu metin düzenleyicisine kopyalayın.

    function getText(strURL)
    {
        var strResult;
    
        try
        {
            // Create the WinHTTPRequest ActiveX Object.
            var WinHttpReq = new ActiveXObject(
                                      "WinHttp.WinHttpRequest.5.1");
    
            //  Create an HTTP request.
            var temp = WinHttpReq.Open("GET", strURL, false);
    
            //  Send the HTTP request.
            WinHttpReq.Send();
    
            //  Retrieve the response text.
            strResult = WinHttpReq.ResponseText;
        }
        catch (objError)
        {
            strResult = objError + "\n"
            strResult += "WinHTTP returned error: " + 
                (objError.number & 0xFFFF).toString() + "\n\n";
            strResult += objError.description;
        }
    
        //  Return the response text.
        return strResult;
    }
    
    WScript.Echo(getText("https://www.microsoft.com/default.htm"));
    
  3. Dosyayı "Retrieve.js" olarak kaydedin.

  4. Komut isteminden "cscript Retrieve.js" yazın ve ENTER tuşuna basın.

Artık https://www.microsoft.comkonumundaki Web sayfasının HTML kaynak kodunu almak için WinHttpRequest nesnesi kullanan bir betiğiniz var. Kodun görünmesi için birkaç saniye beklemeniz gerekebilir.

Uygulama yalnızca bir işlev içerir: "getText". Betiğin ilk satırı winhttprequestnesnesini oluşturur.

    // Create the WinHTTPRequest ActiveX Object.
    var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");

JScript altyapısı bu satırla karşılaştığında, bu nesnenin bir örneğini oluşturur. Bu satırda "ActiveX bileşeni nesne oluşturamıyor" hata iletisini alırsanız, büyük olasılıkla WinHttp.dll düzgün kaydedilmemiş veya sistemde yok.

Betiğin sonraki satırı Open yöntemini çağırır.

    //  Create an HTTP request.
    WinHttpReq.Open("GET", "https://www.microsoft.com", false);

Üç parametre hangi HTTP fiilinin kullanılacağını, kaynağın adını ve WinHTTP'nin zaman uyumlu veya zaman uyumsuz olarak kullanılıp kullanılmayacağını belirtir. Bu örnekte, HTTP fiili"GET" kullanılarak https://www.microsoft.com'dan veri almak yöntemi uygulanmaktadır. Son parametre için FALSE belirtilmesi, işlemin zaman uyumlu olarak gerçekleştiğini belirler. Open yöntemi, adın anlamına gelebileceği gibi kaynağa bağlantı kurmaz. Bunun yerine, oturum, bağlantı ve istek hakkındaki bilgileri koruyan iç veri yapılarını başlatır.

Send yöntemi istek üst bilgilerini bir araya getirerek isteği gönderir. Senkron modda çağrıldığında, Gönder yöntemi, uygulamanın devam etmesine izin vermeden önce de bir yanıt bekler.

    // Send the HTTP request.
    WinHttpReq.Send();

İstek gönderildikten sonra betik, WinHttpRequest nesnesinin ResponseText özelliğinin değerini döndürür. Bu özellik, yanıtın varlık gövdesini, bu örnekte belgenin kaynağını içerir.

    // Get the response text.
    return WinHttpReq.ResponseText;

Betiğin yürütülmesi, kaynağın tüm metni alınırken duraklatılır. Kaynak metni işlevden döndürülür ve görüntülenir.

WinHttpRequest nesnesi, HTTP işlemi için ayrılan tüm iç kaynakların serbest bırakılmasını sağlar.

Verileri Zaman Uyumsuz Olarak Alma

WinHTTP kullanarak verileri eşzamansız olarak almak, verileri eşzamanlı olarak almaya çok benzer. İki küçük değişiklik yaparak önceki bölümdeki betiği değiştirin.

  1. WinHTTP yöntemlerinin zaman uyumsuz olarak gerçekleştirileceğini belirtmek için Open yönteminin üçüncü parametresini "false" yerine "true" olarak ayarlayın.

       //  Create a HTTP request.
        var temp = WinHttpReq.Open("GET", strURL, true);
    
  2. Yanıtın tamamının alındığından emin olmak için ResponseText özelliğine erişmeden önce WaitForResponse yöntemini çağırın.

        //  Send the HTTP request.
        WinHttpReq.Send();
    
        // Wait for the entire response.
        WinHttpReq.WaitForResponse();
    
        //  Retrieve the response text.
        strResult = WinHttpReq.ResponseText;
    

Betikte WinHTTP'yi zaman uyumsuz olarak kullanmanın temel avantajı, Send yönteminin hemen geri dönmesidir. İstek bir çalışan iş parçacığı tarafından hazırlanır ve gönderilir. Bu, uygulamanızın yanıtı beklerken başka işlemler gerçekleştirmesini sağlar. Yanıta erişmeye çalışmadan önce, WaitForResponse yöntemini çağırarak yanıtın tamamının alındığından emin olun. Aksi takdirde bir hata oluşabilir.

WaitForResponse yöntemi, işlem için bir zaman aşımı değeri belirtmek için de kullanılabilir. İsteğe bağlı bir parametre, zaman aşımı değerini saniye olarak belirtmenizi sağlar.

WinHttpRequest

HTTP/1.1 Açıklama İsteği (RFC 2616)