Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

PHP ile Soket Bağlantısı

Konu, 'PHP' kısmında ustaderdem tarafından paylaşıldı.

  1. ustaderdem

    ustaderdem Üye

    Kayıt:
    21 Aralık 2002
    Mesajlar:
    57
    Beğenilen Mesajlar:
    0
    Meslek:
    Elektronik Müh.
    Şehir:
    İzmir
    Merhabalar Arkadaşlar,

    Acilen yardıma ihtiyacım var, yardım edebilirseniz çok sevinirim...

    Şimdi,


    Ben PHP ile http://smsgateway.bigfoot.com:8080/services/smsgateway adresine bağlanıp HTTP POST 1.0 ile

    Content-type: application/x-www-form-urlencoded
    Accept-charset: utf-8
    Content-length: xxx (where xxx is the length of the body)
    username
    password
    sms_text

    gibi bilgileri iligili server'a göndermek istiyorum...

    Bunun için

    $fp=fsockopen("http://smsgateway.bigfoot.com:8080/services/smsgateway", 80, $hatano, $hatamsj, 30);

    fputs ($fp, "POST / HTTP/1.0\r\nHost: /services/smsgateway\r\n Content-type: application/x-www-form-urlencoded\r\nAccept-charset: utf-8\r\nContent-length: 100\r\nusername: ... \r\npassword: .... \r\ntest_mode: no\r\ntype: text\r\nnumbers: ".$gidecek_tel_no."\r\noriginator: \r\nversion: 1.0");

    kodlarını kullanıyorum...

    Ancak daha ilk adımda yani soket bağlantısı kurma aşamasında hata veriyor ve bir türlü bağlantı kuramıyorum...


    Burada yaptığım bir hata mı var acaba?

    Yada bu işin başka bir tekniği var mıdır ?

    Bu soket bağlantısı meselesi bayağa uğraştırı oldu benim için, yardım edebilirseniz çok sevinirim!!

    İlgilenen Herkese Şimdiden Teşekkür Ederim..


    Erdem Uslan
    http://www.erdwebhizmetleri.com
    --------------------------------------------
     
  2. Ansugo

    Ansugo Daimi Üye

    Kayıt:
    24 Temmuz 2002
    Mesajlar:
    6,090
    Beğenilen Mesajlar:
    0
    Merhaba,

    Bunun PHP ile nasıl olacağını zannedersem bir ara zeb.biz'^de fatihhood'un bir makalesinde okumuş idim.

    Belki işine yarar düşüncesi ile, geçenlerde PERL ile yaptığım bir scriptin bir kısmını yapıştırıyorum.

    Kod:
    #!/usr/bin/perl
    
    require LWP::UserAgent;
    require HTTP::Request;
    use HTTP::Request::Common;
    require HTTP::Headers;
    
    # Istek edilecek sayfa numaraları
    push(@dizi,63522);
    push(@dizi,66722);
    push(@dizi,717268);
    push(@dizi,718231);
    push(@dizi,76347);
    push(@dizi,76827);
    push(@dizi,78564);
    push(@dizi,79859);
    push(@dizi,83418);
    push(@dizi,836749);
    push(@dizi,8611);
    
    # Parola ve kullanıcı adı
    $username = "XXX";
    $password = "XXXX";
    
    print STDOUT "Isleme Baslaniyooor...\n";
    ###### SIFREYI ONAYLAT ve SESSION BILGILERINI AL #####
    $ua = LWP::UserAgent->new;
    $response = $ua->request(POST 'http://site.com/form.asp',[TxtAboneKodu=>"$username",TxtSifre=>"$password"]);
    $aort = $response->as_string;
    
    # Response'den header verileri alındı. İçinde session bilgisi de mevcut.
    
    @mont = split(/\n/,$aort);
    foreach $satir (@mont) {
    	chomp $satir;
    	if($satir =~ m/Set-Cookie: /ig) {
    		$satir =~ s/Set-Cookie: //ig;
    		($mon,$san) = split(/;/,$satir);
    		($ar,$siz) = split(/=/,$mon);
    		print "$ar\n$siz\n"; # $ar $siz Cookie Bilgileri
    	}
    }
    # Burada ise header bilgileri ayıklanıyor.. Adam bize cookie göndereceği için set-cookie satırını alıyoruz. Burada session id mevcut.
    ###### ADAGOREDEN SAYFAYI AL ######
    foreach $eleman (@dizi) {
    	print STDOUT "$eleman Isleme Konuldu...\n";
    	$ua = LWP::UserAgent->new;
    	$response = $ua->request(POST 'http://site.com/form.asp',
    						Cookie => "$ar=$siz; path=/;",
    						Content => [HidIslem => 'BUL',HidMevno => "$eleman",HidMevtur => '6',HidMevtertip => '5']);
    	open(F,">./$eleman\.html");
    	print F $response->as_string();
    	close(F);
    	print STDOUT "$elaman kaydedildi\n--------------------\n";
    }
    __END__;
    
    Bunu belli sayfalari indireceğim sitenin session acmasindan dolayi tek tek indirmek zorunda kalmamak için yazmıştım.

    Bu script ilk başta kullanıcı adı ve parolanın verildiği scripte verileri POST ile gönderir. Oradan dönen başlık bilgilerinden Set-Cookie bölümünden Session ID yi alır.

    Diğer isteklerde ise sayfaları bu session id ye göre geri yollar. Yani browserın yaptığı işin basit halini gerçekler.

    Şu hali birkaç değişiklik ile en baştaki perl modüllerinin yüklü olduğu serverlarda çalışacak durumdadır. Fakat bu script komut satırında çalışır.

    Umarım az-biraz yardımcı olur. Fakat fatihhood ile görüşebilirsen makalesini isteyebilirsin. Çok iyi idi diye hatırlıyorum.

    Kolay Gelsin...
     
  3. Scorpion

    Scorpion Daimi Üye

    Kayıt:
    17 Ekim 2002
    Mesajlar:
    962
    Beğenilen Mesajlar:
    0
    ewet fatih yazmıştı bole bişiler
     
  4. Scorpion

    Scorpion Daimi Üye

    Kayıt:
    17 Ekim 2002
    Mesajlar:
    962
    Beğenilen Mesajlar:
    0
  5. CrazyCat

    CrazyCat Daimi Üye

    Kayıt:
    25 Temmuz 2002
    Mesajlar:
    653
    Beğenilen Mesajlar:
    0
    Meslek:
    lecturer
    Şehir:
    Adana
    Sanırım o makale com porta bilgi göndermek ile ilgili idi. bir TCP socket bağlantısı yapacak isen aşağıdaki kodları kullanabilirsin.

    PHP:
    <?php
    error_reporting 
    (E_ALL);

    echo 
    "<h2>TCP/IP Connection</h2>\n";

    /* Get the port for the WWW service. */
    $service_port getservbyname ('www''tcp');

    /* Get the IP address for the target host. */
    $address gethostbyname ('www.php.net');

    /* Create a TCP/IP socket. */
    $socket socket (AF_INETSOCK_STREAM0);
    if (
    $socket 0) {
        echo 
    "socket() failed: reason: " strerror ($socket) . "\n";
    } else {
        
    "socket() successful: " strerror ($socket) . "\n";
    }

    echo 
    "Attempting to connect to '$address' on port '$service_port'...";
    $result connect ($socket$address$service_port);
    if (
    $result 0) {
        echo 
    "connect() failed.\nReason: ($result) " strerror($result) . "\n";
    } else {
        echo 
    "OK.\n";
    }

    $in "HEAD / HTTP/1.0\r\n\r\n";
    $out '';

    echo 
    "Sending HTTP HEAD request...";
    write ($socket$instrlen ($in));
    echo 
    "OK.\n";

    echo 
    "Reading response:\n\n";
    while (
    read ($socket$out2048)) {
        echo 
    $out;
    }

    echo 
    "Closing socket...";
    close ($socket);
    echo 
    "OK.\n\n";
    ?>
          

    Yukardaki örnek klasik bir TCP/IP Client uygulaması ve sorunsuz çalışıyor.

    bağlantı için

    PHP:
    int connect (resource socketstring address [, int port])
    fonksiyonu kullanılıyor. dönen değer sıfırdan küçük ise bir hata oluştuğunu gösterir.

    sokete bilgi döndermek için ise

    PHP:
    int write (resource socket_desstring &bufferint length)
    fonksiyonu kullanılıyor.

    dönen değer de

    PHP:
    int read (resource socket_desstring bufferint length [, int type])
    fonksiyonu ile bir döngü içinde okutuluyor.

    eğer serverin http portuna bağlanacaksan ve adresi belli deği ise de örnekteki gibi http portu için kullanılan adresi

    PHP:
    int getservbyname (string servicestring protocol)
    fonksiyonu ile öğrenebilirsin.

    son bir nokta.

    bu fonksiyonları windows desteklemiyor olabilir :)
    kolay gelsin :)