July 11, 2013

İki hata var:

  1. HTTP nesnesi kurulduktan sonra perform() ile gönderilmeli.

  2. S harfini büyük yazınc http nesnesi StatusLine türünde bir nesne ilklemiş oluyorsun. Halbuki küçük harfli statusLine() ile http nesnesinin durumunu almak gerek:

   http.perform();
   auto sl = http.statusLine;    // (nitelik gibi daha doğal olduğu için parantezsiz çağırdım)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 11, 2013

Alıntı (agora):

>

ingilizce sitenin kütüphane sayfasında mı yazıyor dil bilgim yok :(

Belgesindeki örneklerder öğrendim:

http://dlang.org/phobos/std_net_curl.html#HTTP

Alıntı:

>

html kodlarını engelletebiliyor muyuz peki bu durumda?

Onu anlamadım. :(

Alıntı:

>

http.perform burada hangi gorevi ustleniyor?

Ben de örneklerden öğrendim. Anlaşılan, HTTP nesnesini kurmak ve hazırlamak hemen gönderilmesi için yeterli değil. perform() istemi gönderiyormuş.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 11, 2013

Alıntı (agora):

>

bize anlamsız çıktılar veriyor.

HTML'in isteme karşılık ne geldiğinden haberi olmadığı için. Sonuçta biz bir EXE istesek sunucu "merhaba" diye bir mesaj da verebilir.

Alıntı:

>

Heh bu tam olarak da http.performan yüzünden oluşuyor.

"Yüzünden" demeyelim. perform() kendi işini yapıyor.

Alıntı:

>

kodları görmeyi nasıl engelleyeceğiz.

Belgesinde yazdığı gibi, HTTP bu modülün alt düzey bir olanağı. Örneğin 'download' yerine onu kullanıyorsan bir nedeni olmalı ve o zaman da bu gibi sorunları kendimiz halletmeliyiz. (Aslında download'u da denemedim; belki o da içeriği ekrana döküyordur.)

Sanırım bu işi temiz olarak halletmek için HTTP.onReceiveHeader ve HTTP.onReceive'i kullanmak gerekiyor. O zaman veriyi 'data' parametresi olarak alacaksın.

Alıntı:

>

indirmeler için aslında download fonksiyonu var lakin onun da onProgress parçacığı yok.

Evet işte, üst düzey daha kolay ama istediğimiz ayrıntıda ayar olanağı vermiyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 11, 2013

Aşağıdaki örnek onReceiveHeader ve onReceive'in istedikleri delegate'leri veriyorlar.

Bazen kodun içine temsilci yerleştirmek yerine serbest işlev kullanmak isteyebiliriz. onReceiveHeader ve onReceive özellikle delegate istediklerinden serbest bir işlev göstergesini (yani function'ı) delegate'e dönüştürmek için std.functional.toDelegate'ten de nasıl yararlanılabileceğini gösterdim.

import std.net.curl;
import std.stdio;
import std.algorithm;
import std.functional;

void başlıkYazdır(in char[] key, in char[] value)
{
   writefln("başlık: %s = %s", key, value);
}

void main()
{
   auto http = HTTP("http://ddili.org");

   http.onReceiveHeader = toDelegate(&başlıkYazdır);

   http.onReceive = delegate size_t(ubyte[] data) {
       // Ekranı kalabalıklaştırmayalım
       immutable gösterecekKadarı = min(data.length, 10);

       writefln("veri (%s baytın %s baytı):", data.length, gösterecekKadarı);
       writefln("  %s", data[0..gösterecekKadarı]);

       return data.length;
   };

   http.perform();
   auto sl = http.statusLine();
   if(sl.code == 200)
   {
       writeln("Hello dolly");
   }
   else
   {
       writeln("Goodbye dolly");
   }
   writeln(sl);
}

data'nın string olduğu bilindiğinde şöyle de yazdırılabilir:

       writefln("  %s", cast(string)data[0..gösterecekKadarı]);

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

July 11, 2013

Alıntı (agora):

>

writeln ile writefln farklı sonuclar mi döndürür?

Bir de ortak bir dilde anlaşmamız gerek. "Döndürür" deyince işlevin döndürdüğü değer anlaşılıyor. O zaman hayır, ikisi de 'void' döndürür. ;)

Ama tek farkları, writefln'in düzen dizgisi kullanmasıdır.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »