• 16-09-2010, 01:41:22
    #1
    Dostlar curl hakkında ufak bir sorum olacak.

    Login olmadan konuları okuyamadığımız bir forum var. CURL kullanarak bir bot yazdım ve bot login olup konuları getiriyor.
    Öncelikle kategorileri getiriyor bot. Ancak kategorilerin içindeki konuları getirmek için, her kategori seçişimde, tekrar tekrar login olup cookie oluşturuyorum.
    Acaba bu mantık doğru mu yoksa her seferinde login olmadan da bu işlemi yapabilir miyim ?
  • 16-09-2010, 01:52:48
    #2
    curl_init -> curl sessionını açar.
    curl_close -> curl session ını kapatır. dolayısıyla, clurl_close dediğiniz andan itibaren, veya yeni bir curl_init kullandığınız andan itibaren, üyelik girişiniz son bulacaktır. Yani curl close kullanılmazsa istenilen sayfa sorunsuz çalışır. Yani her sayfaya başkınından önce üstteki kodları yazıp, altına yeni bir curl_init yazmadan aynı curl sessionı üzerinden devam edebilrisiniz.
  • 16-09-2010, 02:04:30
    #3
    curl_init ile açtım session ve kapatmadım diyelim. file_get_contents($url); zaten çalışmıyor. peki ben nasıl çağıracağım sayfayı ?
  • 16-09-2010, 02:10:56
    #4
    Kullandığınız curl fonksiyonunu buraya yazın ona göre ayarlama yapalım, file_get_contents le cooike ayarlanamıyor malesef netten bulduğum smf için belirttiğim şekilde bir curl fonksiyonu:

    Alıntı
    <?php
    $id = "kullaniciadi";
    $pw = "sifre";
    $postfields = "user=$id&passwrd=$pw&cookielength=60&cookieneverx p=on&submit=Giriş Yap";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 1); // Get the header
    curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie");
    $yazmanagerekyok=curl_setopt($ch, CURLOPT_URL,
    "http://www.sehrimetal.com/Smf/index.php?action=login2");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields");
    curl_exec($ch);

    $forum=curl_setopt($ch, CURLOPT_URL,'http://www.sehrimetal.com/Smf/forumlinki.php');
    curl_exec($ch);

    $topic=curl_setopt($ch, CURLOPT_URL,'http://www.sehrimetal.com/Smf/topiclinki.php');
    curl_exec($ch);

    curl_close($ch);
    ?>
  • 16-09-2010, 02:16:42
    #5
    senin yazdığın curl ile aynı.

    $forum=curl_setopt($ch, CURLOPT_URL,'http://www.sehrimetal.com/Smf/forumlinki.php');
    curl_exec($ch);

    burası böyle;

    $forum=curl_setopt($ch, CURLOPT_URL,$URL);
    curl_exec($ch);

    $URL diye bi değişken var. Her seferinde yeni bir url gönderiyorum. Ana sayfa için, kategoriler için, konular için... 1 kere session açıp her seferinde kullanamaz mıyım ?
  • 16-09-2010, 02:18:34
    #6
    Prostavaryo adlı üyeden alıntı: mesajı görüntüle
    senin yazdığın curl ile aynı.

    $forum=curl_setopt($ch, CURLOPT_URL,'http://www.sehrimetal.com/Smf/forumlinki.php');
    curl_exec($ch);

    burası böyle;

    $forum=curl_setopt($ch, CURLOPT_URL,$URL);
    curl_exec($ch);

    $URL diye bi değişken var. Her seferinde yeni bir url gönderiyorum. Ana sayfa için, kategoriler için, konular için... 1 kere session açıp her seferinde kullanamaz mıyım ?
    Elbette kullanabilirsin, onu anlatmaya çalışıyorum zaten.
  • 16-09-2010, 02:24:08
    #7
    function baglan($url)
    {

    $postdata = "username=*****g&password=*****&autologin=on&redir ect=&login=Log+in";

    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, "http://www.***/login.php");

    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
    curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // 0 olursa sonucu ekrana bastirir
    curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt ($ch, CURLOPT_REFERER, "http://www.google.com");
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_exec ($ch);

    curl_setopt ($ch, CURLOPT_URL, $url);
    $result = curl_exec ($ch);


    //curl_close($ch);

    return $result;


    }

    kullandığım curl bu.


    $site = baglan($_POST['cat']); //session açıyorum kategori içindeki konuları alabilmek için


    $site = stristr($site, "<span class=\"genmed\"><b>Topics</b></span>");


    preg_match_all('#<td class="row1" width="100%"><span class="topictitle"></span><a href="(.*?)" class="topictitle">(.*?)</a>#si',$site,$postlist);


    for($i=0;$i<count($postlist[0]);$i++)
    {
    echo baglan($postlist[1][$i]); //tekrar session açıyorum konunun içeriğini alabilmek için
    }


    şimdi ne yapmam gerektiğini söyleyebilir misin ?
  • 16-09-2010, 02:28:52
    #8
    Hocam ilk önce sessionu bağla daha sonra ise cooike siz bir curl fonksiyonu yaz yani daha sonraki linklere bağlanmak için başka bir fonksiyonu kullan ama curl session açma baştan çünkü session açık kalacak.
  • 16-09-2010, 02:29:45
    #9
    ???