Mesut.Erdemir: Bir yazılımcının günlüğü..

PHP İle POST İşlemleri

closeBu yazı 1 yıl 7 ay 2 gün önce yayınlanmış olduğundan güncelliğini yitirmiş veya içeriğindeki bilgilerin geçerliliği kaybolmuş olabilir. Herhangi bir yanlış anlaşılmadan bu site sorumlu değildir.

Çoğu durumda, tek bir HTML Form kullanarak veriyi POST etmek, problemlerimizi gidermektedir. Peki biraz daha gelişmiş bir problem ile karşılaşırsak? Mesela; sayfamız üzerinde iki veya daha fazla farklı adrese POST edilecek veriler olursa, ve bunların bir de önem sıraları olursa ve ikinci POST işlemi birinciden gelebilecek veriye ihtiyaç duyarsa? Güzel soru değil mi :) Aslında bu problemi stepli formlar şeklinde çözebilmek mümkün olsa da, verimli olamayabileceği düşüncesindeyim. Çözüm, tüm alanları tek bir form aracılığıyla POST etmek ve bu dataları sunucu tarafında ayrıştırarak, ilgili adreslere veya API’lere POST edebilmek.

Sunucu tarafında POST işlemi yapabilmek için, iki yöntem mevcut. Bunlardan birincisi(ve sık kullanılanı) PHP cURL eklentisi kullanmak. Çoğu hosting kurulumları da, bu eklentiyi destekler. İkinci olarak ise, PHP’nin Socket Connection ‘ını kullanmak. Öncelikle cURL ile POST yapmakla başlayalım:

<?php

 // POST edilecek dataları set ediyoruz
 $post_data['field1'] = 'BirinciData';
 $post_data['field2'] = 'IkinciData';

 // Diziyi böl ve hazırla (field1=BirinciData)
 foreach ( $post_data as $key => $value) {
 $post_items[] = $key . '=' . $value;
 }

 // Dataları serileştir
 $post_string = implode ('&', $post_items);

 // cURL bağlantısı oluştur - Datayı POST edeceğimiz adres
 $curl_connection = curl_init('http://example.com/api.php');

 // cURL seçeneklerini ayarla
 curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
 curl_setopt($curl_connection, CURLOPT_USERAGENT,
 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
 curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
 // Gönderilecek datayı set et
 curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);

 // İşlemi gerçekleştir
 $result = curl_exec($curl_connection);

 // cURL bağlantısı hakkında bilgi al
 print_r(curl_getinfo($curl_connection));
 echo curl_errno($curl_connection) . '-' . curl_error($curl_connection);
 // POST işleminden dönen bilgiyi göster
 //print($result);

 // Bağlantıyı kapat
 curl_close($curl_connection);

 ?>

35. satırda, API’den dönen sonuç alınacaktır. İkinci yöntemimiz de, socket bağlantısı kurup POST işlemini gerçekleştirmek.

<?php

 // POST edilecek dataları set ediyoruz
 $post_data['field1'] = 'BirinciData';
 $post_data['field2'] = 'IkinciData';

 // Diziyi böl ve hazırla (field1=BirinciData)
 foreach ( $post_data as $key => $value) {
 $post_items[] = $key . '=' . $value;
 }

 // Dataları serileştir
 $post_string = implode ('&', $post_items);

 /* Connection üzerinden POST edebilmek için
 $post_string 'den önce ? keywordünü ekliyoruz */
 $post_string = '?' . $post_string;

 // POST edilecek serileştirilmiş verinin boyutunu buluyoruz
 $data_length = strlen($post_string);

 // Socket Connection kuruyoruz
 $connection = fsockopen('example.com', 80);

 // Datayı Connection 'dan yolluyoruz.
 fputs($connection, "POST  /api.php  HTTP/1.1\r\n");
 fputs($connection, "Host: example.com \r\n");
 fputs($connection, "Content-Type: text/html\r\n");
 fputs($connection, "Content-Length: $data_length\r\n");
 fputs($connection, "Connection: close\r\n\r\n");
 fputs($connection, $post_string);

 // POST işleminden dönen bilgiyi göster
 $result = '';
 while(!feof($connection)) {
 $result .= fgets($connection, 1024);
 }

 //print($result);

 // Bağlantıyı kapat
 fclose($connection);

?>

Benzer yazılar:

  1. PEAR İle Veritabanı İşlemleri – 1
  • hocam MSIE 6 yı değiştirseydiniz, fayırfox felan koysaydınız :)

    • Seçici davranan siteleri düşündüm. Adamı Firefox var diye dışlamasınlar sonra :) Bazı devlet sitelerinde bile IE6 olmadan almıyorlar içeri :P

Buraya yapılan yorumları RSS 2.0 beslemesinden takip edebilirsiniz.

*