PHP İle POST İşlemleri
Bu 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:
SDU - Bilgisayar Programcılığı mezunuyum. Sıkı bir Linuxçu ve Özgür Yazılım felsefesini benimsemiş biriyim.
makseli

8 Tem, 2010
hocam MSIE 6 yı değiştirseydiniz, fayırfox felan koysaydınız
Mesut

8 Tem, 2010
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