Thread overview
Ortam değişkeninden değer okumak(get ve post methodu için)
February 08, 2011

C dilinde:


   char Buffer[512];
   int InputLength = atoi( getenv("INPUT_LENGTH") );
   fread( Buffer, InputLength, 1, stdin );



biçiminde yazılan,

perlde ise :


read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

biçiminde yazılan kodu D'ye çeviremedim.

Sanırım env ile uzunluk alıp o kadar uzunluktaki veriyi okuyoruz ancak nasıl olacak bilmiyorum.

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

February 08, 2011

getenv ile içerik uzunluğunu alıyoruz. Buraya kadar her şey tamam.
Sonrada akımdan o kadar uzunluktaki boyutu okuyacağız. Ancak nasıl? Sanırım getchar ile okuyabiliyorduk. Geçmiş mesajlara bakayım.

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

February 08, 2011

Hmm benim hatam. Ben POST methodu için konuşuyordum. Siz GET methodu için anlamışsınız.

Şuan get için konuşuyorum:
Alıntı:

>

Onun sonucunu da ayrıştır() diye bir işleve gönderip string[string] bir eşleme tablosu elde etmişim.

Bende sizin kodunuza bakmadan önce aynı şeyi yapıyorum. Kabul belki daha önceden bakıp esinlenmiş olabilirim :-P
Bakın unittesti:

unittest
{
   string[string] deneme;

   deneme=fixedString("hayvan=at&derece=Orta&sevilen+hayvan=ğüsçü&ikinci+d%C3%BC%C4%9Fme=Ba%C5%9Fka+D%C3%BC%C4%9Fme");
   assert(deneme["hayvan"]=="at");
   assert(deneme["sevilen hayvan"]=="ğüşçü");

}

Kod burada. İşlevin adı fixedString: https://github.com/canalpay/turna/blob/master/library/get.d#L30

Alıntı:

>

Hangi akımdan okuyoruz? Benim bildiğim kadarıyla cgi programlarının ihtiyaçları ortam değişkeni olarak gelir. Şu programla oynadıkça QUERY_STRING'in nasıl değiştiğine bak:

Bu method Get için. Benim get ile şuan bir sorunum yok.

Alıntı:

>

Şu programda da sorguDönüştür() diye bir işlevden yararlanmıştım:

Evet bende sizin kodlarınızı alıp library modülüne ekledim:https://github.com/canalpay/turna/blob/f7ce8bb1644cf917e36f4c0963b24d9164d38abc/library/convertToUTF8.d

Şimdi Post modülüne konuşuyoruz:

Ben post modülünü nasıl yazacağım hakkında konuşuyordum. Yani post ile nasıl veriyi alacağımı. İlk mesajda örnekler vardı başka dillerden. O kodlardan yararlanıp o kodları D diline çevirmeye çalıştım ancak yapamamıştım. Şuan anladığım kadarıyla şu biçimde olacak. :


import std.stdio;
import std.process;
import std.conv;
import std.cstream;
void main()
{
   char[] deneme;
   try {
       writeln("Uzunluk: ", to!int(getenv("CONTENT_LENGTH")));

   } catch (Exception) {
       stderr.writeln("Geçersiz değer");
   }

   while(deneme.length<to!int(getenv("CONTENT_LENGTH"))){

       deneme~=din.getc;
   }

}

Sanırım bu kod sayesinde post methodu ile gönderilen verileri alabileceğim. Şimdi deneyeceğim.

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

February 08, 2011

Ben o cgi deneme programında cgi için ilginç olan değişkenleri getenv ile okuyordum:

import std.stdio;
import std.process;
import std.conv;

void main()
{
   try {
       writeln("Uzunluk: ", to!int(getenv("CONTENT_LENGTH")));

   } catch (ConvException) {
       stderr.writeln("Geçersiz değer");
   }
}

Ali

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

February 08, 2011

Hangi akımdan okuyoruz? Benim bildiğim kadarıyla cgi programlarının ihtiyaçları ortam değişkeni olarak gelir. Şu programla oynadıkça QUERY_STRING'in nasıl değiştiğine bak:

http://ddili.org/cgi-bin/deneme

Şu programda da sorguDönüştür() diye bir işlevden yararlanmıştım:

http://ddili.org/ornek_kod/trileri_deneme.d

Ali

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

February 08, 2011

Alıntı (acehreli):

>

sorguDönüştür() diye bir işlevden yararlanmıştım

Onun sonucunu da ayrıştır() diye bir işleve gönderip string[string] bir eşleme tablosu elde etmişim.

Ali

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

February 08, 2011

POST, standart girişten geliyormuş. Deneme programındaki formu 'method="POST"' olarak değiştirince şu çalıştı:

   writeln("\n<b>Standart giriş:</b>\n");

   foreach (satır; stdin.byLine()) {
       writeln("satır: ", satır, "<br>");
   }

Ali

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

February 10, 2011

Alıntı:

>
>     writeln("\n<b>Standart giriş:</b>\n");
>
>     foreach (satır; stdin.byLine()) {
>         writeln("satır: ", satır, "<br>");
>     }
> ```

>

Ben

char[] deneme;
while(deneme.length<to!int(getenv("CONTENT_LENGTH"))){

   deneme~=din.getc;

}



biçiminde yaptım.

Ayrıca

Alıntı:
>
> Şu programda da sorguDönüştür() diye bir işlevden yararlanmıştım:
>

Ayrıca ona gerek yokmuş. std.uri'deki decode işlevi sanırım aynı işe yarıyor? Ayrıca başka işlevlerde var hangisi daha doğru bilmiyorum. Ben şuanlık decode işlevini kullanacağım.

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

İşi görüyorsa tamamdır. :)

Alıntı (canalpay):

>
>     char[] deneme;
>     while(deneme.length<to!int(getenv("CONTENT_LENGTH"))){
> ```


O satırı okurken < karakterini kapatan > karakteri aradım ama bulamadım. Beynim C++'ın şablonlarında kalmış. :D İşlecin etrafında boşluklar olsa daha güzel olur: ;)


while(deneme.length < to!int(getenv("CONTENT_LENGTH"))){




Alıntı:
>
> std.uri'deki decode işlevi sanırım aynı işe yarıyor?
>

Güzel. :) Bir sürü şeye de dikkat ediyor. Kesinlikle onu kullanmak gerek.

Ali

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